我的數據在Exhibitions
和Markets
之間有多對多關係。 在創建新展覽時,應該爲其分配一些現有市場。 我創建了一個通用的寶庫,它看起來是這樣的:EF6多對多關係添加重複條目
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;
}
的想法是讓每一個具體的存儲庫來定義它自己的操作,用於更新它的引用到其他實體。
protected override void UpdateReferences(Exhibition model, DbEntityEntry<Model.EventManagement.Exhibition> entity)
{
entity.Entity.Markets = new List<Model.EventManagement.Market>();
foreach (var market in model.Markets)
{
var marketEntity = Context.Markets.Single(m => m.Id == market.Id);
entity.Entity.Markets.Add(marketEntity);
}
}
發生的問題是,當我創建一個已經存在的市場的新展會時,相關市場是重複的。我的上下文使用以下設置:
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
所以,我的問題是如何說服EF現有市場相關聯的,而不是創建副本,?
我讀了很多關於在導航屬性旁邊使用ID屬性以避免這種問題的方法,但是通過多對多關係,這似乎不是一種選擇。
我的問題是,現有市場與創建的展覽沒有關聯,而是市場創建爲重複。 – Jensen