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="data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework"" 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();
}
我遇到的问题是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="data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework"" 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="data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<!--Models.LORS.LORSDataEntities-->
这是一个复制粘贴问题,再加上我缺乏经验。希望这能帮助其他人。