【发布时间】:2012-11-23 12:12:47
【问题描述】:
我在实体框架 4.1 和关系方面遇到问题。
这是我的课程:
[Table("PROJTABLE")]
public class Certifikat {
[Key]
public long Recid { get; set; }
public String Projid { get; set; }
public virtual StandardAndScope StandardInfo { get; set; }
}
[Table("DS_CRT_PROJSTANDARDSCOPE")]
public class StandardAndScope {
//[Key]
//public long RECID { get; set; }
[Key]
public String Projid { get; set; }
public String Standard { get; set; }
public String Scope { get; set; }
}
由于我无法控制数据库,因此我无法更改键和 ID 以支持约定,因此我坚持使用此设置。
我的问题是,Certifikat 可以与一个 StandardAndScope 有关系。两个表中的键都称为 Projid - 但严格来说,这不是两个表的数据库中的主键。
我真正想说的是:“certifikat c join standardandscope s on c.Projid=s.Projid”
如何使用 fluent api 完成此任务?
【问题讨论】:
-
两个实体是否都引用了
Project实体? -
戴德。我的问题非常相关。如果它们引用相同的项目实体,您可以使用这些导航属性。
-
抱歉,没有注意到您的评论。实际上没有项目实体(如果我有机会我会杀死制作这个数据库的人)。但是我发现,如果不同的列具有特定值(“crt”),则只有一对多关系,但我不知道是否可以告诉实体框架仅映射设置此值的行
-
好吧,糟糕的设计,叹息。您无法通过映射解决它,因为
Projid应该是其中一个实体的标识符。如答案所示,您将不得不求助于临时加入。 (我祈祷你找不到数据库设计者)。
标签: c# entity-framework