C# 在fluent api和关系方面存在问题

C# 在fluent api和关系方面存在问题,c#,entity-framework,C#,Entity Framework,我在实体框架4.1和关系方面遇到问题 以下是我的课程: [Table("PROJTABLE")] public class Certifikat { [Key] public long Recid { get; set; } public String Projid { get; set; } public virtual StandardAndScope StandardInfo { get; se

我在实体框架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可以与一个标准和范围建立关系。这两个表中的键都称为Projid,但严格来说,这不是这两个表的数据库中的主键

我真正想说的是:“certifikat c join standardandscope s on c.Projid=s.Projid”


我如何使用fluent api实现这一点?

我想您正在寻找这样的东西:

var result = dataContext.Certifikats
    .Join(dataContext.StandardAndScopes,
        c => c.Projid,
        s => s.Projid,
        (c, s) => new
        {
            Certifikat = c,
            StandardAndScope = s
        });

其中,
dataContext
是您的
DbContext
类的一个实例。

两个实体是否都引用了一个
项目
实体?Dynde。我的问题很相关。如果它们引用相同的项目实体,您可以使用这些导航属性。抱歉,没有注意到您的评论。实际上没有项目实体(如果我有机会,我会杀了创建这个数据库的人)。然而,我发现,如果不同的列具有特定的值(“crt”),则只有一对多的关系,但我不知道是否可以告诉entity framework仅映射该值设置的行OK,糟糕的设计,叹气。您不能使用映射来解决它,因为
Projid
应该是其中一个实体的标识符。正如答案所示,你将不得不求助于临时加入。(我祈祷你不会找到数据库设计师)。好吧,这并不是利用EF的导航属性的优势。在我需要连接数据的时候,我不应该依赖它。@Dynde,我没有看到在你的类中定义任何导航属性。真的吗?我认为虚拟标准和范围标准信息是一个导航属性。然而,我将不得不求助于类的这种连接,而不是使用导航属性。当与standardscope存在一对多关系时,我将如何进行这种连接?某种列表=s-但s是单数?@Dynde,我不明白你的问题。