【问题标题】:Entity framework code first mapping by foreign keys实体框架代码首先通过外键映射
【发布时间】:2015-05-03 11:14:21
【问题描述】:

我有以下表格:

Document (Id int PK, LatestVersionId int FK)
DocumentVersion (Id int PK, DocumentId int FK)

文档可以有一个或多个版本,同时一个版本属于一个文档。 我有以下课程:

public class Document {
    public int Id {get;set;}
    public int LatestVersionId {get;set;}
    public DocumentVersion LatestVersion {get;set;}
}
public class DocumentVersion {
    public int Id {get;set;}
    public int DocumentId {get;set;}
    public Document Document {get;set;}
}

当前映射:

HasOptional(t => t.LatestVersion).WithRequired(t => t.Document).Map(t => t.MapKey("DocumentId")) // DocumentMap
HasRequired(t => t.Document).WithOptional(t => t.LatestVersion).Map(t => t.MapKey("LatestVersionId")); // DocumentVersionMap

我收到以下异常:System.InvalidOperationException:在类型“DocumentVersion”上声明的导航属性“Document”已配置有冲突的映射信息。

我应该如何映射这种关系?

【问题讨论】:

    标签: c# entity-framework linq-to-sql orm


    【解决方案1】:

    您能否按如下方式更新您的类定义:

    public class Document {
        [Key]
        public int Id {get;set;}
    
        public List<DocumentVersion> DocumentVersions {get;set;}
    }
    
    public class DocumentVersion {
        [Key]
        public int Id {get;set;}
    
        [ForeignKey("Document")] 
        public int DocumentId {get;set;}
    
        public Document Document {get;set;}
    }
    

    流畅的 API:

    modelBuilder.Entity<Document>()
                .HasMany(d => d.DocumentVersions)
                .WithRequired(version => version.Document)
                .HasForeignKey(version => version.DocumentId);
    

    【讨论】:

    • 恐怕我无法更改类定义。这些类在某些集成服务中使用 + 代码未包含在测试中。
    • @Daemon025 但根据您的定义,一个文档只能有一个版本:public DocumentVersion LatestVersion {get;set;}
    • 是的。在这种情况下,我使用 HasOptional,因为有些文档没有版本。
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2011-11-29
    • 2023-03-23
    • 1970-01-01
    • 2011-08-08
    • 2016-09-25
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多