EF存储库未从数据库加载数据

本文关键字:数据库 加载 数据 存储 EF | 更新日期: 2023-09-27 18:29:22

我有两个数据库需要从中调用数据。IntranetApps和LawOfficerServer(LORS)。

IntranetApps部分已经编写并正在运行。我正在添加LawOfficerServer部分。

我创建了一个EDMX(LORSDataEntities.EDMX)和两个.tt文件,即LORSDataEntities.Context.tt和LORSDataEntities.tt,它们的模式与IntranetApps的模式相同。我创建了一个单独的Repository类,即LORSDepository.cs,该类是根据工作原理构建的。

所有Repository、EDMX和.tt文件都在一个名为DataAccess的项目中。

我在ServicesLayer项目中调用数据,该项目有我的LORSDataService.cs(以另一端的工作模式为模式),在那里我有一个对FindAll()的基本调用。

这是代码:

    public static List<Incident> GetAllIncidents()
    {
        using (IUnitOfWork unitOfWork = new LORSDataEntities())
        {
            LORSRepository<DataAccess.Models.LORS.Incident> incidentRepos = new LORSRepository<DataAccess.Models.LORS.Incident>(unitOfWork);
            try
            {
                var incidents = incidentRepos.FindAll()
                    .Include(i => i.Officer);
                    .OrderBy(i => i.IncidentYear)
                    .ThenBy(i => i.Officer.BadgeNumber)
                    .ThenBy(i => i.IncidentNumber);
                return incidents.ToList();
            }
            catch (InvalidOperationException exc)
            {
                ExceptionPolicy.HandleException(exc, "DataAccess");
                throw exc;
            }
        }
    }

偶发事件是EDMX中的一个表。然而,我得到了这样的信息:

The entity type Incident is not part of the model for the current context.

使用SQL Server Profiler,我可以看到IntranetApps调用,但看不到LORS调用。就好像存储库从未尝试过与数据库对话一样。

在web应用程序的web.config中,我有以下连接String:

   <add name="LORSDataEntities" connectionString="metadata=res://*/Models.IntranetAppsEntities.csdl|res://*/Models.IntranetAppsEntities.ssdl|res://*/Models.IntranetAppsEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

有没有想过我哪里出了问题,或者解决我错过的问题?

以下是LORSDepository类的开始:

public class LORSRepository<T> : IRepository<T> where T : class
{
    private LORSDataEntities _context;
    private DbSet<T> _objectSet;
    public LORSRepository(IUnitOfWork dbContext)
    {
        if (dbContext == null)
        {
            throw new ArgumentNullException("A unit of work is required");
        }
        this._context = dbContext as LORSDataEntities;
        this._objectSet = _context.Set<T>();
    }
    public LORSRepository()
    {
        this._context = new LORSDataEntities();
        this._objectSet = _context.Set<T>();
    }

    public void Add(T entity)
    {
        _objectSet.Add(entity);
    }

这是我的IUnitOfWork类:

public interface IUnitOfWork : IDisposable
{
    void Save();
}

EF存储库未从数据库加载数据

我遇到的问题是web.config中的connectionString错误。我有这个:

<add name="LORSDataEntities" connectionString="metadata=res://*/Models.IntranetAppsEntities.csdl|res://*/Models.IntranetAppsEntities.ssdl|res://*/Models.IntranetAppsEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<!--Models.IntranetAppsEntities-->

我应该有这个:

<add name="LORSDataEntities" connectionString="metadata=res://*/Models.LORS.LORSDataEntities.csdl|res://*/Models.LORS.LORSDataEntities.ssdl|res://*/Models.LORS.LORSDataEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<!--Models.LORS.LORSDataEntities-->

这是一个复制粘贴问题,再加上我缺乏经验。希望这能帮助其他人。