EF-Code first complex type with a navigational property

狂风中的少年 提交于 2019-12-04 00:07:41

问题


My Model:

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; }

}

When generating the database, I get:

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.

How do I have a navigational property inside a complex type? If I remove the country navigational property, it works fine.


回答1:


Navigation properties (refering to other entities) on a complex type are not supported. You must either make your Location an entity (with its own table) or remove the navigation property Country from Location (and add the [ComplexType] attribute as mentioned by Steve Morgan).

Edit

Reference: http://msdn.microsoft.com/en-us/library/bb738472.aspx

"Complex type cannot contain navigation properties."




回答2:


EF wants to infer a primary key for Location, but can't.

Add a public int LocationId { get; set; } to the Location class and it should be happy.

If you want to use Location as a complex type, annotate it with a [ComplexType] attribute.



来源:https://stackoverflow.com/questions/7603016/ef-code-first-complex-type-with-a-navigational-property

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!