我有简单的一对多关系.

public partial class LinkedDocument
{
    public Guid Id { get; set; }
    public Guid DocumentId { get; set; }

    public virtual TblDocumentData Document { get; set; }
}

public partial class TblDocumentData : IEntity<Guid>
{
    public Guid Id { get; set; }
    // other props
    public virtual ICollection<LinkedDocument> LinkedDocuments { get; set; } = new HashSet<LinkedDocument>();
}

modelBuilder.Entity<LinkedDocument>(
        entity =>
        {
            entity.ToTable("LinkedDocument");

            entity.HasKey(e => new {e.Id, e.DocumentId})
                  .HasName("PK_LinkedDocument")
                  .IsClustered(false);

            entity.Property(e => e.Id).ValueGeneratedNever();

            entity.HasOne(d => d.Document)
                  .WithMany()
                  .HasForeignKey(d => d.DocumentId)
                  .HasConstraintName("FK_LinkedDocument_TBL_DocumentData_DocumentId")
                  .IsRequired()
                  .OnDelete(DeleteBehavior.Cascade);
        });

和Tbl_DocumentData Fluent API(仅部分)

entity.HasMany(d => d.LinkedDocuments)
                      .WithOne(d => d.Document)
                      .HasForeignKey(d => d.DocumentId)
                      .IsRequired();

在保存时,我有如下代码:

this._ctx.Set<TblDocumentData>().Add(documentData);
this._ctx.Set<LinkedDocument>().Add(new LinkedDocument {Id = attachmentModel.EntityId, DocumentId = documentData.Id});
await this._ctx.SaveAsync(cancellationToken);

但在保存时,我看到错误:列名‘TblDocumentDataId’无效. 在调试控制台中,我可以看到SQL脚本是这样生成的:

INSERT INTO [LinkedDocument] ([DocumentId], [Id], [TblDocumentDataId])
      VALUES (@p22, @p23, @p24);

按解决方案搜索-找不到第TblDocumentDataId列-因此这是EF添加的内容.

我在一对多关系的配置中遗漏了什么?

推荐答案

try 将entity.HasOne(d => d.Document).WithMany()更改为:

entity
    .HasOne(d => d.Document)
    .WithMany(data => data.LinkedDocuments) 

您可以从entity.HasMany(d => d.LinkedDocuments)中删除设置(我认为设置相同的两次是没有意义的).

Csharp相关问答推荐

我们应该如何在IHostedService中使用按请求的GbContent实例?

C#将参数传递给具有变化引用的变量

在Dapper中使用IasyncEum重写GetAsyncEum方法

EF Core判断是否应用了AsSplitQuery()

为什么我的ASP.NET核心MVC应用程序要为HTML元素添加一些标识符?

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

与C#中的Zip列表并行

实体框架核心中的ComplexType和OwnsOne有什么不同?

为什么我的表单在绑定到对象时提交空值?

在实体框架中处理通用实体&S变更跟踪器

如何使用C#获取FireStore中的列表输出文档

将类移动到新命名空间后更新RavenDB Raven-Clr-Type

如何在用户在线时限制令牌生成?

如何在Akka.NET中重新启动执行元时清除邮箱

序列化过程中的死循环

为什么在使用JsonDerivedType序列化泛型时缺少$type?

为什么Swashbakle/Swagger在参数中包含变量名?

流畅的验证--如何为属性重用规则?

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

仅在Blazor Web App中覆盖生产的基本路径(.NET8中的_Hosts.cshtml文件功能?)