【问题标题】:How to Read data from generic repository in ASP.NET controller class?如何从 ASP.NET 控制器类中的通用存储库中读取数据?
【发布时间】:2014-01-09 06:04:39
【问题描述】:

我在 Visual Studio 2013 中使用 ASP.NET mvc 5,并倾向于通过通用存储库从控制器类中的函数表 (SQL Server) 中读取数据。我有 IGenericRepository,它具有 IQueryable 一个功能,我有 GenericRepository 类,我正在实现这个接口。我得到了从 baseContext 继承的 FunctionContext。我有 baseContext 的原因是所有的 dbcontexts 都可以使用一个路径来访问数据库,但同时保持表的数量限制在业务需要。

我已经设法实现了 genericRepository,但在 GenericRepository 中调试时似乎得到了针对 _dbSet 的空数据,并且我无法读取控制器类中的数据,而且出现错误

“变量查询”

EntityFramework.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

在此非常感谢....

通用存储库接口

 public interface IGenericRepository<TEntity> : IDisposable
{
    IQueryable<TEntity> GetAll(); 

}

通用存储库

public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
    protected DbSet<TEntity> _DbSet;
    private readonly DbContext _dbContext;

    public GenericRepository()
    {

    }

    public GenericRepository(DbContext dbContext)
    {
        this._dbContext = dbContext;
        _DbSet = _dbContext.Set<TEntity>();
    }



    public IQueryable<TEntity> GetAll()
    {
        return _DbSet;
    }


    public void Dispose()
    {

    }
}

基础上下文

 public class BaseContext<TContext> : DbContext where TContext : DbContext
{
    static BaseContext()
    {
        Database.SetInitializer<TContext>(null);
    }

    protected BaseContext()
        : base("name = ApplicationDbConnection")
    { }
}

函数上下文

 public class FunctionsContext : BaseContext<FunctionsContext>
{
    public DbSet<App_Functions> Functions { get; set; }
}

函数映射类

[Table("Functions")]
public class App_Functions
{
     public App_Functions()
    {
    }

    [Key]
    public int Function_ID { get; set; }

    [StringLength(50)]
    [Required]
    public string Title { get; set; }

    public int Hierarchy_level { get; set; }
}

功能域类

 public class Functions
{
    public Functions()
    {

    }

    public int Function_ID { get; set; }
    public string Title { get; set; }
    public int Hierarchy_level { get; set; }
}

控制器类

public class HomeController : Controller
{
    public ActionResult Index()
    {
        using (var repository = new GenericRepository<Functions>(new FunctionsContext()))
        {
               ?????????????????????????????????
             var query = repository.GetAll().Select(x => new Functions
            {
                Function_ID = x.Function_ID,
                Title = x.Title,
                Hierarchy_level = x.Hierarchy_level
            });

            foreach(var item in query)
            {
                var a2 = item.Title;
            }

        }


        return View();
    }
}

【问题讨论】:

    标签: c# asp.net-mvc entity-framework repository-pattern


    【解决方案1】:

    存储库构造函数上的类型参数不正确。应该是

    new GenericRepository<App_Functions>(new FunctionsContext()))
    

    因为App_Functions是实体的类型。

    【讨论】:

    • 谢谢它的工作原理......所以这意味着接下来的事情; unitOfWork 我会将相同的构造函数移动到 UnitOfWork
    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多