【发布时间】:2018-07-27 23:52:13
【问题描述】:
我是 Entity Framework Core 的新手,我对下一种情况有疑问。
我有三个对象,像这样:
TableA {
public int Id {get; set;}
public string Name {get; set;}
public IList<TableA_TableB> TableA_TableBList {get; set;}
}
TableA_TableB {
public int Id {get; set;}
public TableA TableA {get; set;}
public int TableAId {get; set;}
public TableB TableB {get; set;}
public int TableBId {get; set;}
}
TableB {
public int Id {get; set;}
public string Name {get; set;}
public IList<TableA_TableB> TableA_TableBList {get; set;}
}
我正在使用 Fluent Api 来映射关系:
builder
.HasOne(a_b => a_b.TableA)
.WithMany(a => a.TableA_TableBList)
.HasForeignKey(a_b => a_b.TableAId);
builder
.HasOne(a_b => a_b.TableB)
.WithMany(b => b.TableA_TableBList)
.HasForeignKey(a_b => a_b.TableBId);
我的问题是当我尝试用 TableA_TablesB 中的新值在 TableA 中插入一个新值时,但是 TableB 中存在一个现有值。我使用的代码是:
var entity = (TableA)tableADto; //From controller and convert to TableA using explict operator
entity.TableA_TableBList = new List<TableA_TableBList>();
entity.TableA_TableBList.Add(new TableA_TableB()
{
TableAId = entity.Id,
TableBId = 1 // I put a fix value just to test
});
_tableARepository.Add(entity);
_unitOfWork.Commit();
当我调用SaveChanges() 时,显示此错误:
INSERT 语句与 FOREIGN KEY 约束“FK_TableA_TableB_TableB_TableBId”冲突。
冲突发生在数据库“tenantteste”、表“dbo.TableB”、列“Id”中。
我尝试获取 TableB 值并添加导航属性(TableB 属性)。但是,不是创建关系,而是在我保存时添加了值。
我已经阅读了有关 stackoverflow 的文档和一些问题,并且我相信使用 FK 应该可以工作,但它没有工作。
我不知道我做错了什么。
【问题讨论】:
-
tableADto的类型是什么,为什么需要将其转换为实体?如果它是派生类,则强制转换不会更改实际类型。另外存储库Add方法是什么样的?您能否使用干净的项目和纯 EF Core 模型方法进行复制,例如简单DbContext、Add、SaveChanges()? -
@IvanStoev 有一些区别,当我将对象发送到前端时,例如地址:前端是对象,但后端是实体。方法
Add()就是context.Set<>().Add而Commit()只是调用SaveChange()。我删除了我的旧实现并逐步重写并工作
标签: c# entity-framework entity-framework-core