我有一个用户模型,其中包含城市,城镇和地区表格的导航属性:
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.
是否可以在单独的类中创建导航属性,还是需要创建单独的表?
答案 0 :(得分:2)
如果您不想为Location创建单独的表,那么您应该使用Complex Type(它们没有密钥并且与具有复杂类型属性的实体存储在同一个表中)。但这是另一个问题 - 正如文档所说:
复杂类型不能包含导航属性。
所以,答案显而易见 - 您应该创建单独的联结表以保持位置。而位置应该是带密钥的实体。