我有三堂课
public class Country
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public byte CountryID { get; set; }
public byte OfficialLangID { get; set; }
}
public class Language
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public byte LangID { get; set; }
}
public class Name
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public byte NameID { get; set; }
public bool isLanguage { get; set; } // true for language - false for country
public byte FK { get; set; } // FK=LangID or CountryID
}
现在我要创建导航属性:
出于多种原因,我想采用这种方式,其中之一是在不加入表的情况下搜索一张表中的所有名称。
请不要提出其他建议,我想要导航属性。
答案 0 :(得分:2)
为什么要这样做?在这里放一个布尔字段来检查实体的类型没有任何意义吗?最后,ef框架将创建2个表。 这是我的方法:
public class Country
{
public byte Id {get;set;}
public string Name {get;set;}
public int LanguageId {get;set;}
}
public class Language
{
public byte Id {get;set;}
public string Name {get;set;}
// assuming that each language may have one or many countries
public ICollection<Country> Countries {get;set;}
}
此处的ef核心将自动创建表和关系。现在,如果您看到一些重复的代码(如我所了解的),则这两个实体使用相同的字段类型和名称,这是您可以做的
public abstract class EntityBase
{
public byte Id {get;set;}
public string Name {get;set;}
}
现在将此抽象类继承到实体类
public class Country : EntityBase
{
public int LanguageId {get;set;}
}
public class Language : EntityBase
{
public ICollection<Country> Countries {get;set;}
}