C# 实体框架(CF)多个表PK到同一FK
我有几张这样的桌子:C# 实体框架(CF)多个表PK到同一FK,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有几张这样的桌子: public class Family { public Guid Id { get; set; } public virtual Career Career { get; set; } } public class Career { public Guid Id { get; set; } } 还有一些类似的课程 然后是一个表,其中所有的翻译都取决于语言 public class Language { public string
public class Family
{
public Guid Id { get; set; }
public virtual Career Career { get; set; }
}
public class Career
{
public Guid Id { get; set; }
}
还有一些类似的课程
然后是一个表,其中所有的翻译都取决于语言
public class Language
{
public string LanguageCulture { get; set; }
public Guid ObjectId { get; set; }
public string Translation { get; set; }
}
我这里的问题是,我想让语言理解ObjectId可以来自这些类中的任何一个。我怎样才能做到这一点?默认情况下,为引用它的每个表创建一列 如果您希望能够使用LINQ/Lambda的所有优点(为了您的关系模型),我建议您不要走这条路 我会创建一个从
语言
到每个类的单独链接,或者直接从需要它的类链接到语言文化
和翻译
我希望实现一个模型,使检索和处理数据尽可能直观,即使现在在构建数据时这可能有点麻烦。我很有信心,在接下来的几个月/几年里,你会很高兴建立起真正的关系
如果你继续你的例子,你会有这样的东西:
var object = _dataset.Where( x=> x.somecolumn == somevalue);
var language = _dataset.Where( x => x.ObjectType == object.Type
&& x.ObjectID == object.ID );
而不是简单地做
var object = _dataset.Where( x=> x.somecolumn == somevalue);
object.Language //if you create a separate link to each object
object.LanguageCulture // if you remove your Language object and link directly to what it is your after
在后者中,您只需要获取原始对象,还可以进行子查询,如
var objects = _dataset.Where( x=> x.somecolumn == somevalue
&& x.Language.LanguageCulture.Country == "Sweden")
在您最初的想法中,使用连接仍然可以进行此查询,但一般来说,这样做会更烦人
如果您想避免反复编写相同的内容,可以使用一个抽象类,该类包含可以在所有需要它的类中继承的语言字段