我有两个需要从中调用数据的数据库。 IntranetApps和LawOfficerServer(LORS)。
IntranetApps部分已编写并正在运行。我正在添加LawOfficerServer部分。
我创建了EDMX(LORSDataEntities.edmx)和两个.tt文件,LORSDataEntities.Context.tt和LORSDataEntities.tt模式在IntranetApps工作之后。 我创建了一个单独的Repository类,LORSRepository.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中,我有这个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" />
我出错了什么想法,或解决我错过的问题?
这是LORSRepository类的开头:
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();
}
答案 0 :(得分:0)
我遇到的问题是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-->
这是一个复制粘贴问题,加上我的经验不足。希望这可以帮助其他人。