gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:45 25 4
gpt4 key购买 nike

有没有办法使用这个答案中描述的方法No FindAsync() method on IDbSet对于 DbContext 的 DbSet 属性?

编辑:

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

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

public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
}

如何使用 MyDbSet(答案中描述的类。)或类似的类,而不是 DbSet?

public class MyContext : DbContext
{
public MyDbSet<Customer> Customers { get; set; }
}

现在的问题是, Entity Framework 似乎只为 IDbSet 或 DbSet 类型的属性生成表。

最佳答案

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

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
}

现在您可以创建一个 DbSetAdapater当你需要它并获得 IAsyncDbSet 时。您可以复制您的属性,因为 EF 似乎会忽略它们或添加 ToAsyncDbSet() IDbSet<T> 的扩展方法

public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
public IAsyncDbSet<Customer> CustomersAsync { get { return new DbSetAdapter<Customer>(Customers); } }
}

关于c# - DbContext 类的 IDbSet 属性的适配器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com