首页 > 解决方案 > ReferentialConstraint 中的依赖属性映射到存储生成的列。列:'DocumentId'

问题描述

我一直在寻找类似的问题和答案,但我想我无法将修复应用于我自己的情况。

我有两个模型之间的一对一关系(或者更确切地说:我正在尝试拥有它)。

我想要完成的是:

var dossierDocument = new DossierDocument
{
    DossierId = dossierId,
    CreatedAt = DateTime.UtcNow,
    Document = new Document
    {
        Content = content,
        Filename = $"{template.ToFriendlyName()}.docx",
        MimeType = template.MimeType
    },
};

this.Context.DossierDocuments.Add(dossierDocument);
await this.Context.SaveChangesAsync();

但这给了我错误:

[InvalidOperationException:ReferentialConstraint 中的依赖属性映射到存储生成的列。列:'DocumentId'。]

楷模


档案文件.cs

public class DossierDocument
{
    public virtual int DossierDocumentId { get; set; }

    public virtual int DossierId { get; set; }

    public virtual DateTime CreatedAt { get; set; }

    public virtual int DocumentId { get; set; }

    [ForeignKey("DocumentId")]
    public virtual Document Document { get; set; }
}

文档.cs

public class Document
{
    public virtual int DocumentId { get; set; }

    public virtual byte[] Content { get; set; }

    public virtual string MimeType { get; set; }

    public virtual string Filename { get; set; }

    public virtual DossierDocument DossierDocument { get; set; }
}

DossierDocumentConfiguration.cs

public class DossierDocumentConfiguration : EntityTypeConfiguration<DossierDocument>
{
    public DossierDocumentConfiguration()
    {
        this.ToTable("DossierDocuments").HasKey(t => t.DossierDocumentId);
        this.Property(e => e.DossierDocumentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.HasRequired(e => e.Document).WithRequiredPrincipal(e => e.DossierDocument);
    }
}

文档配置.cs

public class DocumentConfiguration : EntityTypeConfiguration<Document>
{
    public DocumentConfiguration()
    {
        this.ToTable("Documents").HasKey(t => t.DocumentId);
        this.Property(e => e.DocumentId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.Property(e => e.MimeType).HasMaxLength(150);
        this.Property(e => e.Filename).HasMaxLength(150);
    }
}

所以我想知道我做错了什么?

我的目标是查询DossierDocuments,所以我想要DossierDocument一个导航属性到Document. 我没有看到有一个导航属性的意义DossierDocument,所以我宁愿没有一个,但无论我尝试什么都失败了。


更新1:

我想我很幸运,因为在我进行更改后它似乎可以工作,但我仍然想知道我是否正确修复了它。

DossierDocumentConfiguration.cs我改变了:

this.HasRequired(e => e.Document).WithRequiredPrincipal(e => e.DossierDocument);

对此:

this.HasKey(e => e.DocumentId).HasRequired(e => e.Document).WithOptional();

标签: entity-frameworkentity-framework-6

解决方案


推荐阅读