我开始使用EF代码第一个模型开发Asp.NET MVC5应用程序,该应用程序应该让知道语言的成员然后将语言链接回知道该语言的成员,这样它就是多对多这种关系。
public class Member
{
...
public List<Language> Languages { set; get; }
}
public class Language
{
public in Id {get;set;}
public string shortName {set;get;}
public HashSet<Member> mastersOf { get;set; }
}
Q1。这是一种可行的方法吗?我是EF代码的新手,这是一些谷歌搜索后的第一个想法。稍后,将仅搜索具有特定语言的成员。
Q2。如何使语言“不可变”,以便每种语言只有一行?
答案 0 :(得分:0)
嗯,imho有一些遗漏的东西:
...
公共班级成员 { ... public virtual ICollection Languages {set;得到; }
}
公共课语言 { public int Id {get; set;} public string shortName {set; get;} public virtual ICollection mastersOf {get; set; } }
R1:这是一种可行的方法,但您需要一些配置代码
R2:不确定理解所以我的答案如下:在设置导航属性时,总是(如果可能)使用上下文附加实体。
答案 1 :(得分:0)
一种方法是
public class Member
{
...
public virtual ICollection<Language> Languages { set; get; }
}
public class Language
{
public in Id {get;set;}
public string shortName {set;get;}
public virtual ICollection<Member> MastersOf { get;set; }
}
更好的方法是使用映射表,映射成员和语言。通过这种方式,您将拥有一个包含每个成员的一个条目的表,并且您将拥有一个表,其中包含每种语言的一个条目。第3个映射表将具有所有组合。
public class Member
{
...
public virtual ICollection<MemberLanguage> Languages { set; get; }
}
public class Language
{
public in Id {get;set;}
public string shortName {set;get;}
public virtual ICollection<MemberLanguage> MastersOf { get;set; }
}
public class MemberLanguage
{
public int MemberId {get; set;}
public int LanguageId {get; set;}
public virtual Member Member { set; get; } //linked to memberid by convention
public virtual Language Language { set; get; } //linked to languageid by convention
}