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

是否可以创建用于将项目添加到实体框架dbset的通用方法?分享

时间:2023-04-10 17:39:07 C#

是否可以创建一种通用方法将项目添加到实体框架数据库集?我以前没有使用过EntityFramework或泛型,在减少代码方面遇到了一些困难。我正在解析一个文本文件以加载10个查找表,其中的数据可能每晚都在变化。文本文件的标题为“type”,后跟键/值集列表。我有这个工作完美,但我想重构代码来清理它,并想使用通用方法来做到这一点,所以我可以减少代码的重复。我已经解析为泛型方法,但我无法弄清楚如何以通用方式将实体添加到上下文中。我必须遍历每种类型的实体列表并将它们添加到上下文中:voidMain(){switch(line.ToUpper()){case"AREA":{foreach(areaList中的var元素){if(context.Area.Find(element.Id)==null){context.Area.Add(element);}}休息;}case"CATEGORY":{列表categoryList=this.GetItems(file);foreach(categoryList中的var元素){if(context.Category.Find(element.Id)==null){context.Category.Add(element);}}休息;}}}privateListGetItems(StreamReaderreader)whereT:ILookupData,new(){stringline;列表列表=新列表();while(reader.Peek()==''){line=reader.ReadLine().TrimStart();string[]tokens=line.Split(newstring[]{"-"},2,StringSplitOptions.None);T项=新T();item.Id=Convert.ToInt32(tokens[0]);item.Description=(字符串)令牌[1];列表。添加(项目);}返回列表;更新:上面的工作正常,但我似乎无法获得上下文。我已经尝试了一些不同的东西,但是当我尝试概括上下文时,我似乎仍然遇到这个错误:Type'T'mustbeareferencetypeinordertouseitasanargument'T'inamethodofgeneric类型。我尝试的最后一件事是将通用的GetDbSet添加到上下文中:publicDbSetGetDbSet()whereT:class{returnthis.Set();但是我在将此代码添加到控制器中的GetItems方法时遇到了同样的错误:using(MyContextcontext=newMyContext()){vardbSet=context.GetDbSet();我在当前项目中有一个通用存储库。这是它的添加方式:publicvoidAdd(TnewItem)whereT:class{db.Set().Add(newItem);其中db是DbContext对象本身。其中T:class修复了一个关于引用类型的错误。没有它,您可以传递任何类型的T,包括bool或struct,或DbSet.Add()无法处理的任何值类型。其中指定T必须是一个类,它是一个引用类型,因此是允许的。C#学习教程就是这样:是否可以创建一个通用方法来将项目添加到实体框架dbset?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: