Помогите указать ключи

186
16 февраля 2018, 16:24

Дана модель:

public class Customer
    {
        [Key]
        public int Id { get; set; }
        [DisplayName("Имя")]
        public string Name { get; set; }
        public IList<Address> Addresses { get; set; }
        public IList<Phone> Phones { get; set; }
        public IList<Email> Emails { get; set; }
        public IList<ProfileUpdate> ProfileUpdates { get; set; }
        [DisplayName("Заметка")]
        public string Notes { get; set; }
        public bool Active { get; set; } // активен ли аккаунт
    }
    public class Street
    {
        [Key]
        public int Id { get; set; }
        [DisplayName("Адрес 1")]
        public string Street1 { get; set; }
        [DisplayName("Адрес 2")]
        public string Street2 { get; set; }
    }
    public class Phone
    {
        [Key]
        public int Id { get; set; }
        public string Type { get; set; }
        [DisplayName("Телефон")]
        public long Value { get; set; }
    }
    public class Email
    {
        [Key]
        public int Id { get; set; }
        public string Type { get; set; }
        [DisplayName("E-mail")]
        public string Value { get; set; }
    }
    public class ProfileUpdate
    {
        [Key]
        public int Id { get; set; }
        public DateTime UpdateDateTime { get; set; }
    }
    public class Address
    {
        [Key]
        public int Id { get; set; }
        public string Type { get; set; }
        public Street Street { get; set; }
        [DisplayName("Почтовый индекс")]
        public int PostalCode { get; set; }
        [DisplayName("Город")]
        public string Town { get; set; }
    }

Пытаюсь создать контроллер MVC5 с представлениями, использующими EF для работы с этой моделью, но пишет ошибку, что Adresses: EntityType 'Adresses' has no key defined. Такое же пишет и для Email, Phone, Emails, Phones, EntitySet Adresses. Что мне изменить?

dbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }
Answer 1

Попробуйте вот так:

public class Customer
    {
        [Key]
        public int Id { get; set; }
        [DisplayName("Имя")]
        public string Name { get; set; }
        public IList<Address> Addresses { get; set; }
        public IList<Phone> Phones { get; set; }
        public IList<Email> Emails { get; set; }
        public IList<ProfileUpdate> ProfileUpdates { get; set; }
        [DisplayName("Заметка")]
        public string Notes { get; set; }
        public bool Active { get; set; } // активен ли аккаунт
    }
Answer 2

Ключом должно быть что-то уникальное для всех записей такого типа в таблице. type например - не подходящее для этого поле. Заведите для всех по аналогии с Customer:

[Key]
public int Id { get; set; }

В итоге так:

public class Customer
{
    [Key]
    public int Id { get; set; }
    [DisplayName("Имя")]
    public string Name { get; set; }
    public virtual IList<Address> Addresses { get; set; }
    public virtual IList<Phone> Phones { get; set; }
    public virtual IList<Email> Emails { get; set; }
    public virtual IList<ProfileUpdate> ProfileUpdates { get; set; }
    [DisplayName("Заметка")]
    public string Notes { get; set; }
    public bool Active { get; set; } // активен ли аккаунт
}
public class Street
{
    [Key]
    public int Id { get; set; }
    [DisplayName("Адрес 1")]
    public string Street1 { get; set; }
    [DisplayName("Адрес 2")]
    public string Street2 { get; set; }
}
public class Phone
{
    [Key]
    public int Id { get; set; }
    public string Type { get; set; }
    [DisplayName("Телефон")]
    public long Value { get; set; }
}
public class Email
{
    [Key]
    public int Id { get; set; }
    public string Type { get; set; }
    [DisplayName("E-mail")]
    public string Value { get; set; }
}
public class ProfileUpdate
{
    [Key]
    public int Id { get; set; }
    public DateTime UpdateDateTime { get; set; }
}
public class Address
{
    [Key]
    public int Id { get; set; }
    public string Type { get; set; }
    public Street Street { get; set; }
    [DisplayName("Почтовый индекс")]
    public int PostalCode { get; set; }
    [DisplayName("Город")]
    public string Town { get; set; }
}
READ ALSO
C# работа с DBF от FoxPRO 2.0

C# работа с DBF от FoxPRO 2.0

В общем такая лабораторная работа: Есть файл DBDBF от FoxPRO 2

282
C# Получение коллекций с вложенными коллекциями из базы MSSQL

C# Получение коллекций с вложенными коллекциями из базы MSSQL

Здравствуйте! Вопрос такой - в своём приложении использую, например, класс подразделения (Department), у которого есть вложенная коллекция сотрудников...

330
Monodevelop.ошибка создания целевого объекта

Monodevelop.ошибка создания целевого объекта

Переношу проект с# window в monodevelopНо выходит ошибка при компиляции ошибка создания целевого объекта LinkEmbeddableAssemblies:

206
Вызвать предупреждение в C#

Вызвать предупреждение в C#

У меня есть функция, которая может работать, даже если получила некорректные данныеНо я хочу предупредить пользователя/программиста, что...

198