我有三堂课
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
}
现在我要创建导航属性:
为什么要这样做?在这里放一个布尔字段来检查实体的类型没有任何意义吗?最后,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;}
}