gpt4 book ai didi

asp.net-core - 无法为 'Model' 创建 DbSet,因为此类型未包含在上下文的模型中

转载 作者:行者123 更新时间:2023-12-04 20:29:45 25 4
gpt4 key购买 nike

我做一个通用并使用 DI

所以我创建了一个空类

public class DBRepo
{
}

和我的模型类继承类 DBRepo
public partial class UserAccount : DBRepo
{
public int Id { get; set; }
public string Account { get; set; }
public string Pwd { get; set; }
}

那么这是一个做 CRUD 的接口(interface)
    public interface IDBAction<TEntity> where TEntity : class,new()
{
void UpdateData(TEntity _entity);
void GetAllData(TEntity _entity);
}
public class DBService<TEntity> : IDBAction<TEntity> where TEntity : class,new()
{
private readonly CoreContext _db;
public DBService(CoreContext _db)
{
this._db = _db;
}
public void UpdateData(TEntity _entity)
{
this._db.Set<TEntity>().UpdateRange(_entity);
this._db.SaveChanges();
}
public void GetAllData(TEntity _entity)
{
var x = this._db.Set<TEntity>().Select(o => o).ToList();
}
}

我在构造函数中的依赖注入(inject)服务提供者
this.DBProvider = new ServiceCollection()
.AddScoped<IDBAction<DBRepo>, DBService<DBRepo>>()
.AddScoped<DBContext>()
.AddDbContext<CoreContext>(options => options.UseSqlServer(ConnectionString))
.BuildServiceProvider();

最后一步我得到服务
DBProvider.GetService<IDBAction<DBRepo>>().GetAllData(new UserAccount());

我将收到与标题相同的错误消息

或者我改为
DBProvider.GetService<IDBAction<UserAccount>>().GetAllData(new UserAccount());

我会收到其他消息

Object reference not set to an instance of an object.'



但是 void UpdateData() 可以工作,
那么如何解决 GetAllData() 问题呢?

最佳答案

错误只是因为您在这里使用的类UserAccount显然没有添加到您的上下文中,CoreContext .那里应该有一个属性,例如:

public DbSet<UserAccount> UserAccounts { get; set; }

无论您最终是否使用通用 Set<T>访问者,你仍然必须定义一个 DbSet对于您的上下文中的实体。

也就是说,您绝对不应该在您的存储库中创建自己的服务集合。使用 Startup.cs 中的主要服务集合注册您的上下文和您的 repo,然后只需将您的 repo 注入(inject)您需要的地方。只要您有一个构造函数来获取您的上下文(您似乎是这样),DI 框架就会使用您的上下文来实例化它。

也就是说,你应该完全放弃 repo 。它仍然需要对 Entity Framework 的依赖,并且除了代理 Entity Framework 方法之外什么都不做。这只是您必须维护和测试的额外内容,没有额外的好处。

关于asp.net-core - 无法为 'Model' 创建 DbSet,因为此类型未包含在上下文的模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49425348/

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