实体打包-自定义我想找到一个解决方法来完成一个简单的解决方案,通过EF自动化一些操作。在保存和检索期间修改查询结果时,我需要它接管,但此类将能够使其适用于任何类型的实体。示例:我有一个MyTestDb。所以在我的C#项目中,我创建了一个新的实体模型(MyTEstDbModel.edmx),并生成了相关的POCO类。好吧,一个有趣的点可能是现实中一个新的自定义类,如下所示:classExample{privateObjectContext_context;私有示例(ObjectContextobj){_context=obj;}publicvoidStore(ObjectSetos){//这里的问题:我不知道ObjectSet中包含的类型//但如果我知道它的类型,我可以像这样工作://->foreachobjectSet中的每个实例通过反射检查是否存在某些属性//,如果我找到它们,那么我总是设置相同的值。//为什么这个?因为我所有的数据库都包含一些常见的文件//比如(createdByUser、TimeToUpdate等等),所以它会很无聊//从程序的任何位置设置所有这些文件。}publicvoidRetrive(ObjectSetos){//这里也有问题:我的所有查询都将按一个或多个值过滤//字段,但我不能使用lambaExpression,因为我不知道objectSet中包含的类型//}//....最后,在任何程序顺序点,代码应如下所示:Exampleobj=newExample(myEntityContext);//->全局变量结果=myEntityContext.ObjectSetTyped.Where(..lambaExpression..condition)result.someProperty="...";obj.Store(结果);//store方法将自动填充所有其他无聊的字段。谁能给我一些关于我的问题提示、帮助和建议的信息?在此先感谢...更新现在,只是另一个问题,我将通过这样的检索方法过滤我的ObjectSet:publicvoidRetrieve(IQueryableooo)whereTEntity:IC{ooo=ooo.Where(p=>p.归档=="MyDefaultValue");但是,从外部方法来看,我的过滤器不会影响objectSet结果。为何如此..?MyEntitiesent=new...MyWrapperwrap=newMyWrapper();wrap.Retrieve(ent.Users);//问题在这里->UsersobjectSet始终相同..定义允许您执行此操作的接口。例如:publicinterfaceIEntity{DateTimeCreatedAt{get;放;}stringCreatedBy{得到;放;你需要在你的实体中“实现”这个接口。例如,您可以修改T4模板以生成实体或在分部类中实现它。这两个属性必须已经在模型中定义,所以实现只是声明性的:publicpartialclassMyEntity:IEntity//That'sall{}现在你可以像这样定义Store:publicvoidStore(TEntityentity)whereTEntity:IEntity{。..}同样可以用查询来完成,但是你可以定义一个自定义扩展方法:=用户);您只需像这样定义查询:varresult=myEntityContext.MyEntities.GetUserEntities("someName");另一种方法是在您的自定义上下文中定义GetQuery:publicIQueryableGetQuery()whereT:IEntity{varquery=GetObjectSetSomehow;返回查询.ApplyGlobalConditions();//Justanotherextensionwithyourconditions}我不是存储库模式的忠实拥护者,但通常您尝试做的是接近通用存储库,因此请查看这篇文章。这些只是一些可以进一步扩展的例子。是的,我只想要一个通用方法,我用数据集和数据表实现了同样的方法……但似乎不可能……..嗯……但让我展示一下你,下面代码片段中的动态关键字看起来很有前途……也许我”我正在寻找解决方案..?publicObjectSetRetrieve(stringentity,stringcontext){类型myObjectContextType=Type.GetType(context);ConstructorInfocs=myObjectContextType.GetConstructor(newType[]{});动态myObjContext=cs.Invoke(newobject[]{});输入t=Type.GetType(实体);ConstructorInfoxi=t.GetConstructor(newType[]{});动态UserEntity=xi.Invoke(newobject[]{});!问题在这里!对象集os=myObjContext.UserEntity.Where(...)return...}惊呆了..EF是开发效率更高的好工具,但是“generalizalbe”太少了以上就是C#学习教程:EntityPackaging-Custom分享,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
