【问题标题】:How to query on a generic model using EF 6如何使用 EF 6 查询通用模型
【发布时间】:2015-09-28 11:44:43
【问题描述】:

我正在开发一个 MVC 5 应用程序。我在我的数据库上查询为:

var result = db.ABCs.AsNoTracking().FirstOrDefault(e => e.Id == Id);

但是如果我想创建一个通用方法并且在编译时不知道模型的名称怎么办。我想查询在运行时传递给方法的任何模型类。 比如:

var result = db.<T>.Where(x => x.Id == Id).ToList();

我该怎么做。我使用的是数据库优先方法,没有存储库或 UoW。

【问题讨论】:

    标签: c# entity-framework linq generics reflection


    【解决方案1】:

    为此,您需要提供一些有关Id 属性的信息。您可以为所有实体属性创建具有通用接口的接口:

    interface IEntity
    {
        int Id {get;}
    }
    

    并在你的类中实现它:

    class ABC : IEntity
    {
        int Id {get; set;} 
        string Name {get;set;}
    }
    
    List<T> GetData<T>(int id) where T : class, IEntity
    {
        var result = db.Set<T>().Where(x => x.Id == Id).ToList();
        return result;
    }
    
    ...
    
    var data = GetData<ABC>(10);
    

    【讨论】:

    • 我很好奇这是否可以在没有基类的情况下使用动态。类似db.Set&lt;T&gt;().Where(x =&gt; ((dynamic)x).Id == Id).ToList();
    • @Dominik 我认为不,EF 不喜欢 dynamic :)
    • 太糟糕了,那太棒了
    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多