当前位置: 首页 > 编程语言 > C#

Many-to-manygenericupdatemethodwithentityframework6分享

时间:2023-04-10 16:12:56 C#

Many-to-manygenericupdatemethodwithentityframework6TupdatedObject,intkey){if(updatedObject==null){返回;}使用(vardatabaseContext=newU()){databaseContext.Database.Log=Console.Write;TfoundEntity=databaseContext.Set().Find(key);databaseContext.Entry(foundEntity).CurrentValues.SetValues(updatedObject);databaseContext.SaveChanges();然而,这并不能处理多对多关系。这个多对多的更新问题可以通过重写TrussSetDatabaseOperations的Update方法来解决:DatabaseOperations如下:}使用(vardatabaseContext=newTrussManagementDatabaseContext()){databaseContext.Database.Log=Console.Write;TrussSetfoundTrussSet=databaseContext.TrussSets.Find(key);databaseContext.Entry(foundTrussSet).CurrentValues.SetValues(updatedTrussSet)//更新TrussSets到Seals的多对多关系databaseContext.Entry(foundTrussSet).Collection(trussSet=>trussSet.Seals).Load();databaseContext.Entry(foundTrussSet).Collection(trussSet=>trussSet.Seals).CurrentValue=updatedTrussSet.海豹;databaseContext.SaveChanges();然而,这种覆盖传播到所有继承自DatabaseOperations并具有TrussSet对象的类。我能否以某种方式将添加的两行注入通用更新方法,以便为更新方法提供集合属性、加载它们并将相应的更新集合应用于实体?提前致谢。查看您的代码,会想到以下内容:}使用(vardatabaseContext=newU()){databaseContext.Database.Log=Console.Write;TfoundEntity=databaseContext.Set().Find(key);varentry=databaseContext.Entry(foundEntity);entry.CurrentValues.SetValues(updatedObject);foreach(varpropinnavigationProperties){varcollection=entry.Collection(prop);集合.Load();collection.CurrentValue=typeof(T).GetProperty(prop).GetValue(updatedObject);}databaseContext.SaveChanges();如果你想要更多的多类型安全,也可以使用表达式而不是字符串(然后从这些表达式中提取属性名称)。UPDATE:在这种情况下,我的意思是“使用表达式”:以上是C#学习教程的全部内容:实体框架6的多对多通用更新方法,如果对大家有用,需要了解更多希望你会更关注C#学习教程——publicvirtualvoidUpdate(TupdatedObject,intkey,paramsExpression>[]navigationProperties){if(updatedObject==null){return;}使用(vardatabaseContext=newU()){databaseContext.Database.Log=Console.Write;TfoundEntity=databaseContext.Set().Find(key);varentry=databaseContext.Entry(foundEntity);entry.CurrentValues.SetValues(updatedObject);foreach(varpropinnavigationProperties){stringmemberName;varmember=prop.BodyasMemberExpression;如果(成员!=null)成员名称=成员.成员.名称;elsethrownewException("其中一个navigationProperties不是成员访问表达式");varcollection=entry.Collection(会员名);集合.Load();collection.CurrentValue=typeof(T).GetProperty(memberName).GetValue(updatedObject);}databaseContext.SaveChanges();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: