public class Mammal{ public int ID { get; set; } public string name { get; set; }}public class Dog : Mammal{ public int TailID { get; set; } public Tail Tail { get; set; }}public class Bat : Mammal{ public int WingID { get; set; } public Wing Wing { get; set; }}public class buffalo : Mammal{ public virtual ICollection<Horn> Horns { get; set; }}public class Tail{ public int ID { get; set; } ...}public class Wing{ public int ID { get; set; } ...}public class Horn{ public int ID { get; set; } ...}
现在,我的背景:
public class MyContext : DbContext{ public DbSet<Mammal> Mammals { get; set; }}
所以,我想只做一个SQL查询,并包含(并加载)所有嵌套实体,如:
var query = myContext.Mammals .IncludeIfTypeIs<Dog>(d => d.Tail) .IncludeIfTypeIs<Bat>(b => b.Wing) .IncludeIfTypeIs<buffalo>(b => b.Horns) ... ...;
我知道我可以单独做,但我不想要因为我有很多实体,我需要最小化数据库请求.
我不想使用延迟加载,因为这也会产生许多数据库请求.
怎么实现呢?
解决方法 你能尝试这样的事吗:public static class Extensions{ public static Iqueryable<Mammal> IncludeExtraEntitIEs<Mammal,T>(this Iqueryable<Mammal> query,T derivedType) where T :Mammal { if (derivedType is Dog) return query.Include("Tail"); if (derivedType is Bat) return query.Include("Wing"); return query; }}
然后在你的db调用中:
var query = myContext.Mammals.IncludeExtraEntitIEs(typeof(Dog));
也许这会奏效.
总结以上是内存溢出为你收集整理的c# – EF条件包含实体类型全部内容,希望文章能够帮你解决c# – EF条件包含实体类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)