实体类型States不是Entity Framework中当前上下文的模型的一部分

问题描述 投票:0回答:2

我的通用存储库中出现错误。

我正在使用具有实体框架和数据库优先方法的通用存储库。

这是我的context.cs

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

 public virtual DbSet<tblUser> tblUsers { get; set; }
 public virtual DbSet<User> Users { get; set; }
 public virtual DbSet<tblState> tblStates { get; set; }`

HomeRepository:当我使用此代码作为非泛型时,我正在获取记录

public IEnumerable<States> GetAllwithoutGeneric()
{
    return _dbContext.Set<tblState>() .
    Select(x => new States {  name = x.name}).ToList();
}

var state1 = homeRepository.GetAllwithoutGeneric();

而且我得到了控制器的state1变量的结果。上面的代码工作正常。

一旦我使用通用存储库

public IQueryable<T> GetAllState()
{
  return _dbContext.Set<T>();
}

并调用上面这样的代码:

HomeRepository<States> homeRepository = new HomeRepository<States>();
var state = homeRepository.GetAllState().ToList();

我收到一个错误:

System.InvalidOperationException:实体类型States不是当前上下文的模型的一部分

一旦我使用非泛型调用相同的tblState实体我得到结果,当我传递State.cs到泛型方法得到上面的错误。

entity-framework repository-pattern
2个回答
1
投票

你的DbSet类型是tblState,而不是States。所以你必须使用tblState而不是States如下:

HomeRepository<tblState> homeRepository = new HomeRepository<tblState>();
var state = homeRepository.GetAllState().ToList();

现在,如果要将输出转换为States,请执行以下操作:

var state = homeRepository.GetAllState()
                          .Select(x => new States {  name = x.name}).ToList();

0
投票

伙计我已经通过创建另一个库项目并保持所有实体与EF在库项目中创建的名称相同来解决自己。

现在我们可以在Repository和Entity框架中给出这个库项目的引用。

现在两个项目都有相同的实体,所以不会有任何错误。

谢谢,警长

© www.soinside.com 2019 - 2024. All rights reserved.