问题描述
在我的应用程序中,两个实体(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方法中删除代码。