C#学习教程:在使用EFCoreWriteCRUD的通用存储库中为所有模型包含所有使用反射的导航属性。我遇到的主要障碍是导航属性没有被加载,因为Core还不支持延迟加载,而且泛型类显然不能为特定于类的属性定义.Include语句。我正在尝试为我的Get方法做一些类似的事情以动态包含所有属性:publicvirtualTGet(GuiditemId,booleager=false){IQueryablequerySet=_context.Set();if(eager){foreach(PropertyInfopintypeof(T).GetProperties()){querySet=querySet.Include(p.Name);}}返回querySet.SingleOrDefault(i=>i.EntityId==itemId);但是,当包含不是导航属性的属性时,它会引发错误。我发现这个答案与EF5相同,但它涉及EF核心中不存在的方法:HowEF5getsadomainobject'slistofnavigationpropertiesIsitpossibletoaccomplishthesamethinginEFCore?在EFCore中使用元数据比在以前的EF版本中更容易。DbContext类提供了一个Model属性,该属性提供对有关实体形状、它们之间的关系以及它们如何映射到数据库的元数据的访问。执行您要求的代码可能如下所示:publicvirtualIQueryableQuery(booleager=false){varquery=_context.Set().AsQueryable();if(eager){foreach(varpropertyin_context.Model.FindEntityType(typeof(T)).GetNavigations())query=query.Include(property.Name);}返回查询;}publicvirtualTGet(GuiditemId,booleager=false){returnQuery(eager).SingleOrDefault(i=>i.EntityId==itemId);请注意,虽然这可以满足您的需求,但它是一种非常有限的通用方法,因为它仅加载实体的直接导航属性,即不处理使用ThenInclude加载嵌套导航属性。以上就是C#学习教程:使用EFCore在通用仓库中使用Reflection,包含了所有导航属性共享的所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
