如何使用c#Fluent API将新类映射到现有表?

问题描述

在我的应用程序中,两个实体(ChartOfAccount & GL)之间存在多对多关系。创建关系后,将创建一个新表(ChartOfAccountGLs)。现在,我尝试创建一个新类来映射具有一对多关系(ChartOfAccountGL-->ChartOfAccount & ChartOfAccounGL-->GL)的这两个实体。但是当我尝试更新时,数据库软件包管理器控制台给出了此错误

“”“中已经有一个名为'FK_dbo.ChartOfAccountGLs_dbo.ChartOfAccounts_ChartOfAccountId'的对象 数据库。无法创建约束或索引。请参阅先前的错误。”

下面显示了我的 ChartOfAccountGL 类:

[Table("ChartOfAccountGLs")]
public class ChartOfAccountGL
{
    public int ChartOfAccountId { get; set; }
    public int GLId { get; set; }

    public ChartOfAccount ChartOfAccount { get; set; }
    public GL GL { get; set; }
}

ChartOfAccountGLConfiguration:

public class ChartOfAccountGLConfiguration : EntityTypeConfiguration<ChartOfAccountGL>
{
    public ChartOfAccountGLConfiguration()
    {
        //Define two composite keys
        HasKey(k => new { k.ChartOfAccountId,k.GLId });

        Property(a => a.ChartOfAccountId)
            .HasColumnName("ChartOfAccountId");

        Property(b => b.GLId)
            .HasColumnName("GLId");

        //Mapping classes
        Hasrequired(a => a.ChartOfAccount)
            .WithMany(b => b.ChartOfAccountGL);

        Hasrequired(f => f.GL)
            .WithMany(b => b.ChartOfAccountGL);
    }
}

有人知道我在哪里做错了吗?

解决方法

升级模型时这是一个已知问题。在EF6中,您可以使用忽略更改,但在ef核心中,请检查以下内容: https://github.com/dotnet/efcore/issues/4237

当前生成迁移时,没有IgnoreChanges等效项。不在Powershell上,或使用ef迁移添加。这需要进入EF7,并且是迁移工作的基础部分,特别是对于使用现有表的应用程序。

如果您使用的是ef core,请尝试这样做(根据问题中的评论):

这可能只是显而易见的事情……但是,作为暂时的解决方法,您可以生成一个迁移,然后从Up / Down方法中删除代码。