Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
C# DbContext类的IDbSet属性的适配器模式_C#_Entity Framework_Adapter_Dbcontext_Dbset - Fatal编程技术网

C# DbContext类的IDbSet属性的适配器模式

C# DbContext类的IDbSet属性的适配器模式,c#,entity-framework,adapter,dbcontext,dbset,C#,Entity Framework,Adapter,Dbcontext,Dbset,对于DbContext的DbSet属性,有没有一种方法可以使用这个答案中描述的方法 编辑: 链接的答案包含如何构建从IDbSet继承的接口并添加对DbSet类的SearchAsync方法的支持的描述。我理解Keith Payne写的所有东西,但我不知道如何在DbContext中使用它 例如,我有一个DbContext,它看起来像这样: public class MyContext : DbContext { public DbSet<Customer> Customers

对于DbContext的DbSet属性,有没有一种方法可以使用这个答案中描述的方法

编辑:

链接的答案包含如何构建从IDbSet继承的接口并添加对DbSet类的SearchAsync方法的支持的描述。我理解Keith Payne写的所有东西,但我不知道如何在DbContext中使用它

例如,我有一个DbContext,它看起来像这样:

public class MyContext : DbContext
{ 
    public DbSet<Customer> Customers { get; set; }
}
公共类MyContext:DbContext
{ 
公共数据库集客户{get;set;}
}
如何使用MyDbSet(答案中描述的类)或类似的类来代替DbSet

public class MyContext : DbContext
{ 
    public MyDbSet<Customer> Customers { get; set; }
}
公共类MyContext:DbContext
{ 
公共MyDbSet客户{get;set;}
}

现在的问题是,实体框架似乎只为IDbSet或DbSet类型的属性生成表。

您的上下文中有常规的DbSet,并创建一个适配器添加请求的接口

public interface IAsyncDbSet<T> : IDbSet<T>
    where T : class
{
    Task<T> FindAsync(params Object[] keyValues);
}

public sealed class DbSetAdapter<T> : IAsyncDbSet<T>, IDbSet<T>
    where T : class
{
    private readonly DbSet<T> _innerDbSet;

    public DbSetAdapter(DbSet<T> innerDbSet)
    {
        _innerDbSet = innerDbSet;
    }

   public Task<T> FindAsync(params object[] keyValues)
   {
          return _innerDbSet.FindAsync(keyValues);
   }

   //Here implement each method so they call _innerDbSet like I did for FindAsync
}

好多了,好多了。然而,我认为你的第二个例子正是你应该做的。如果这样做不起作用,您是否有问题?如果是的话,你能解释一下你遇到了什么样的问题吗?我也这么认为……但是第二个例子不起作用。实体框架不会为不是DbSet或IDbSet类型的属性生成任何表。那么您应该在您的问题中提到它的相关信息。当你问一个问题时,你应该总是试着展示你尝试了什么(你做了),以及你尝试时得到了什么结果(忽略了那个部分)。还要确保在问题本身中包含新的信息,而不仅仅是评论。默认情况下,人们在手机上浏览时看到的评论要比在网络上浏览时少得多,只有几条向上投票的评论,你最后的回复就会出现在“点击查看更多”屏幕上。(还是一个很好的问题,我投了赞成票,如果我知道答案,我也会回答)谢谢你的反馈……你完全正确,我已经在问题中添加了我的“结果”。
public class MyContext : DbContext
{ 
    public DbSet<Customer> Customers { get; set; }
    public IAsyncDbSet<Customer> CustomersAsync { get { return new DbSetAdapter<Customer>(Customers); } }
}