C# EF6添加上的多对多关系重复条目
我的数据在C# EF6添加上的多对多关系重复条目,c#,.net,entity-framework,repository-pattern,C#,.net,Entity Framework,Repository Pattern,我的数据在展览和市场之间存在多对多关系。 创建新展览时,应为其分配一些现有市场。 我创建了一个通用存储库,如下所示: public virtual TDto Create(TDto data) { TEntity entity = ToEntity(data); DbEntityEntry<TEntity> dbEntity = Context.Entry<TEntity>(entity); dbEntity.State =
展览
和市场
之间存在多对多关系。
创建新展览时,应为其分配一些现有市场。
我创建了一个通用存储库,如下所示:
public virtual TDto Create(TDto data)
{
TEntity entity = ToEntity(data);
DbEntityEntry<TEntity> dbEntity = Context.Entry<TEntity>(entity);
dbEntity.State = EntityState.Added;
UpdateReferences(data, dbEntity);
Context.SaveChanges();
data = ToModel(dbEntity.Entity);
return data;
}
因此,我的问题是如何说服英孚将现有市场关联起来,而不是创建重复的市场
我读过很多关于使用ID属性和导航属性来避免此类问题的文章,但对于多对多关系,这似乎不是一个选项。当您将
条目的状态更改为添加的时,条目的状态及其所有关系的状态将更改为添加的
。因此,没有必要单独添加这些关系
因此,注释行UpdateReferences(data,dbEntity)在Create
方法中使用code>,一切正常。当您将条目的状态更改为Added
时,条目的状态及其所有关系的状态将更改为Added
。因此,没有必要单独添加这些关系
因此,注释行UpdateReferences(data,dbEntity)在你的创建方法中,一切都应该正常。我感觉这行有问题
entity.Entity.Markets = new List<Model.EventManagement.Market>();
您能否在实体的构造函数中尝试以下操作:
public Exhibition() {
Markets = new List<Model.EventManagement.Market>();
}
如果它不能正常工作,可能是启用代理是关键。我感觉线路有问题
entity.Entity.Markets = new List<Model.EventManagement.Market>();
您能否在实体的构造函数中尝试以下操作:
public Exhibition() {
Markets = new List<Model.EventManagement.Market>();
}
如果它不能正常工作,可能是启用代理是关键。感谢您为我指明了正确的方向。
这一切都是关于状态
设置为已添加
的时间。我只需要交换UpdateReferences
和State=Added
public virtual TDto Create(TDto data)
{
TEntity entity = ToEntity(data);
DbEntityEntry<TEntity> dbEntity = Context.Entry<TEntity>(entity);
// call UpdateReferences first...
UpdateReferences(data, dbEntity);
// ...then set the State to Added
dbEntity.State = EntityState.Added;
Context.SaveChanges();
data = ToModel(dbEntity.Entity);
return data;
}
要创建的公共虚拟TDto(TDto数据)
{
TEntity实体=实体(数据);
DbEntityEntry dbEntity=Context.Entry(实体);
//首先调用UpdateReferences。。。
更新引用(数据、数据库实体);
//…然后将状态设置为“已添加”
dbEntity.State=EntityState.Added;
SaveChanges();
数据=ToModel(dbEntity.Entity);
返回数据;
}
虽然它现在可以像预期的那样工作,但它非常混乱,因为我认为在之后设置状态也会将子状态设置为Added,但显然不是。。。¯\_(ツ)_/“谢谢你为我指明了正确的方向。
这都是关于状态
被设置为Added
时的问题。我只需要交换更新引用
和状态=Added
public virtual TDto Create(TDto data)
{
TEntity entity = ToEntity(data);
DbEntityEntry<TEntity> dbEntity = Context.Entry<TEntity>(entity);
// call UpdateReferences first...
UpdateReferences(data, dbEntity);
// ...then set the State to Added
dbEntity.State = EntityState.Added;
Context.SaveChanges();
data = ToModel(dbEntity.Entity);
return data;
}
要创建的公共虚拟TDto(TDto数据)
{
TEntity实体=实体(数据);
DbEntityEntry dbEntity=Context.Entry(实体);
//首先调用UpdateReferences。。。
更新引用(数据、数据库实体);
//…然后将状态设置为“已添加”
dbEntity.State=EntityState.Added;
SaveChanges();
数据=ToModel(dbEntity.Entity);
返回数据;
}
虽然它现在可以像预期的那样工作,但它非常混乱,因为我认为在之后设置状态也会将子状态设置为Added,但显然不是…“\_(ツ)_/“我的问题是,现有市场与创建的展览没有关联,而是作为副本创建的市场。我的问题是,现有市场与创建的展览没有关联,而是作为副本创建的市场。
public virtual TDto Create(TDto data)
{
TEntity entity = ToEntity(data);
DbEntityEntry<TEntity> dbEntity = Context.Entry<TEntity>(entity);
// call UpdateReferences first...
UpdateReferences(data, dbEntity);
// ...then set the State to Added
dbEntity.State = EntityState.Added;
Context.SaveChanges();
data = ToModel(dbEntity.Entity);
return data;
}