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

时间:2013-08-27 14:14:44

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

我有两个需要从中调用数据的数据库。 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=&quot;data source=FBHBGSQLDEV01;initial catalog=LawOfficerServer;integrated security=False;User Id=redacted;Password=xxxxxxx;multipleactiveresultsets=True;App=EntityFramework&quot;" 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();

}

1 个答案:

答案 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=&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-->

这是一个复制粘贴问题,加上我的经验不足。希望这可以帮助其他人。