【发布时间】:2015-09-28 19:56:55
【问题描述】:
我在抽象 DatabaseOperations<T,U> 类中有一个用于实体框架的通用 Update 方法:
public virtual void Update(T updatedObject, int key)
{
if (updatedObject == null)
{
return;
}
using (var databaseContext = new U())
{
databaseContext.Database.Log = Console.Write;
T foundEntity = databaseContext.Set<T>().Find(key);
databaseContext.Entry(foundEntity).CurrentValues.SetValues(updatedObject);
databaseContext.SaveChanges();
}
}
但是,这不能处理多对多关系。
这种多对多更新问题可以通过覆盖TrussSetDatabaseOperations : DatabaseOperations<TrussSet, TrussManagementDatabaseContext> 中的Update 方法来解决,如下所示:
public override void Update(TrussSet updatedTrussSet, int key)
{
if (updatedTrussSet == null)
{
return;
}
using (var databaseContext = new TrussManagementDatabaseContext())
{
databaseContext.Database.Log = Console.Write;
TrussSet foundTrussSet = databaseContext.TrussSets.Find(key);
databaseContext.Entry(foundTrussSet).CurrentValues.SetValues(updatedTrussSet)
// Update the many-to-many relationship of TrussSets to Seals
databaseContext.Entry(foundTrussSet).Collection(trussSet => trussSet.Seals).Load();
databaseContext.Entry(foundTrussSet).Collection(trussSet => trussSet.Seals).CurrentValue = updatedTrussSet.Seals;
databaseContext.SaveChanges();
}
}
但是,这种覆盖会扩散到从DatabaseOperations 继承并具有 TrussSet 对象的所有类中。我可以以某种方式将添加的两行注入通用更新方法,以便为更新方法提供集合属性,加载它们,并将相应的更新集合应用于该实体?提前致谢。
【问题讨论】:
标签: c# entity-framework orm dependency-injection entity-framework-6