Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 具有泛型类的实体框架集_Entity Framework_Asp.net Core - Fatal编程技术网

Entity framework 具有泛型类的实体框架集

Entity framework 具有泛型类的实体框架集,entity-framework,asp.net-core,Entity Framework,Asp.net Core,好的,我可能在这里打出高于我的工资等级,但我正在尝试为和EF项目创建一个通用CRUD例程。我大部分时间都在工作,但有一点我还在犹豫 通常情况下,通过上下文添加一个实体- DBContext.MyClass.Add( p ); // p = instance of MyClass 这很好,但因为在处理所有添加的全局方法中,不管它们是什么类,我将模型作为对象传递,所以看起来更像这样- DBContext<whateverobject>.Add(whateverobject); // m

好的,我可能在这里打出高于我的工资等级,但我正在尝试为和EF项目创建一个通用CRUD例程。我大部分时间都在工作,但有一点我还在犹豫

通常情况下,通过上下文添加一个实体-

DBContext.MyClass.Add( p ); // p = instance of MyClass
这很好,但因为在处理所有添加的全局方法中,不管它们是什么类,我将模型作为对象传递,所以看起来更像这样-

DBContext<whateverobject>.Add(whateverobject); // my objects is an object param passed into the method
DBContext.Add(whateverobject);//my objects是传递到方法中的对象参数
我试着做了很多类型的练习,但我没有运气。任何指向正确的方向都会帮助我

我使用的是EF Core 2,所以我的选择可能也比EF 6更加有限


谢谢。

您正在寻找的方法是
DbContext

通用CRUD的通用存储库如下所示:

public class Repo<T> where T: class
{
    private readonly DbSet<T> _set; 

    public Repo(DbContext dbContext)
    {
        _set = dbContext.Set<T>();
    }

    public void Add(T entity) => _set.Add(entity);
}
public interface IEntity
{
    int Id { get; set; }
}

public class User : IEntity
{
    public int Id { get; set; }
}

public static class DbSetExtensions
{
    public static T ById<T>(this DbSet<T> dbSet, int id) where T: class => 
        dbSet.FirstOrDefault(entity => entity.Id == id);
}

您正在寻找的方法是
DbContext

通用CRUD的通用存储库如下所示:

public class Repo<T> where T: class
{
    private readonly DbSet<T> _set; 

    public Repo(DbContext dbContext)
    {
        _set = dbContext.Set<T>();
    }

    public void Add(T entity) => _set.Add(entity);
}
public interface IEntity
{
    int Id { get; set; }
}

public class User : IEntity
{
    public int Id { get; set; }
}

public static class DbSetExtensions
{
    public static T ById<T>(this DbSet<T> dbSet, int id) where T: class => 
        dbSet.FirstOrDefault(entity => entity.Id == id);
}

这有意义吗:Erik,我认为这会让我走上正确的道路,如果你把它作为一个答案,我会给你评分。首先测试它,然后我会回答:)我不希望其他人发现这一点,然后因为它错了而无法使用它。只需提到在EFC中它更容易-你可以简单地做
dbContext.Add(entity)
Tested Eric(至少到了我要离开它的时候)发现,出于各种原因,我最终不会使用通用CRUD方法,但这是一次很好的学习体验。在今天结束前发布一个答案,我会给你。谢谢。这有意义吗:Erik,我想这会让我走上正确的道路,如果你把它作为一个答案,我会给你评分。首先测试它,然后我会回答:)我不想让其他人发现这一点,然后因为它错了而不能使用它。只需提到在EFC中它更容易-你可以简单地做
dbContext.Add(实体)
Tested Eric,至少到了我即将离开的地步,结果证明,出于各种原因,我不会使用通用CRUD方法,但这是一次很好的学习体验。今天结束前发布一个答案,我会给你。谢谢。这是一个很好的答案,但我已经承诺我会将答案交给Erik Philips,他指出e昨天的方向是正确的。但对于那些寻找前进之路的人来说,这也是一个很好的起点。谢谢你的夸奖。我只希望你能解决你的问题。这是一个很好的答案,但我已经承诺我会给埃里克飞利浦一个答案,他昨天为我指出了正确的方向。但是对于那些寻找前进之路的人来说这也是一个很好的起点。谢谢你的夸奖。我只希望你能解决你的问题