Подтвердить что ты не робот

Первый комплексный тип EF-Code с навигационным свойством

Моя модель:

public class Country
{
    public int CountryId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

public class Location
{
    public string Address { get; set; }

    public virtual int CountryId { get; set; }
    public virtual Country Country { get; set; }
}    

public class User{

    protected User()
    {
        Location = new Location();
    }

    public int UserId { get; set; }
    public Location Location { get; set; }

}

При создании базы данных я получаю:

One or more validation errors were detected during model generation:

System.Data.Edm.EdmEntityType: : EntityType 'Location' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Locations� is based on type �Location� that has no keys defined.

Как у меня есть навигационное свойство внутри сложного типа? Если я удалю навигационное свойство страны, он отлично работает.

4b9b3361

Ответ 1

Свойства навигации (ссылающиеся на другие сущности) на сложный тип не поддерживаются. Вы должны либо сделать свой Location сущностью (со своей собственной таблицей), либо удалить свойство навигации Country из Location (и добавить атрибут [ComplexType], как упомянуто Стивом Морганом).

Edit

Ссылка: http://msdn.microsoft.com/en-us/library/bb738472.aspx

"Сложный тип не может содержать свойства навигации".

Ответ 2

EF хочет вывести первичный ключ для местоположения, но не может.

Добавьте класс public int LocationId { get; set; } в класс Location, и он должен быть счастлив.

Если вы хотите использовать Location как сложный тип, аннотируйте его атрибутом [ComplexType].