单独类中的导航属性

时间:2014-02-28 07:59:56

标签: entity-framework

我有一个用户模型,其中包含城市,城镇和地区表格的导航属性:

public class User
{
    ...
    public virtual Location_City City { get; set; }
    public virtual Location_Town Town { get; set; }
    public virtual Location_District District { get; set; }
}

我想将这些属性分组到一个单独的类中,然后重新使用该类,如下所示:

public class Location
{
    public virtual Location_City City { get; set; }
    public virtual Location_Town Town { get; set; }
    public virtual Location_District District { get; set; }
}

public class User
{
    ...
    public Location Location { get; set; }
    public Location ContactPersonLocation {get; set;}
}

我尝试了各种组合,我从位置类中删除虚拟,并将用户类的位置属性设置为导航属性,但我是收到以下错误:

EntityType 'Location' has no key defined. Define the key for this EntityType. Locations: EntityType: EntitySet 'Locations' is based on type 'Location' that has no keys defined.

是否可以在单独的类中创建导航属性,还是需要创建单独的表?

1 个答案:

答案 0 :(得分:2)

如果您不想为Location创建单独的表,那么您应该使用Complex Type(它们没有密钥并且与具有复杂类型属性的实体存储在同一个表中)。但这是另一个问题 - 正如文档所说:

  

复杂类型不能包含导航属性。

所以,答案显而易见 - 您应该创建单独的联结表以保持位置。而位置应该是带密钥的实体。