EF-код первого сложного типа с навигационным свойством - PullRequest
12 голосов
/ 30 сентября 2011

Моя модель:

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.

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

Ответы [ 2 ]

10 голосов
/ 30 сентября 2011

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

Редактировать

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

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

3 голосов
/ 30 сентября 2011

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

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

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

...