实体框架独立项目与主项目中设置的实体

时间:2014-05-27 15:50:53

标签: c# entity-framework

对于将实体集添加到现有项目与在其自己的项目中设置实体以实现可重用性,似乎发生了一些奇怪的事情。

情景一
项目A是一个类库,并添加了一个EF集并连接到数据库 在类库项目的默认类中,编写此代码并编译良好。

  public void test()
    {
        using (var context = new Accu_CRM_dbEntities())
        {
            var test = context.BillableParts.First(P => P.Id == "test");
        }
    }  

情景二
项目B是添加到同一解决方案的另一个项目。引用项目A以便使用项目B中的标识。使用语句放置在将使用EF集进行dB调用的代码文件中。将相同的代码写入项目B;但是,编译器抱怨'DAL.Accu_CRM_dbEntities': type used in a using statement must be implicitly convertible to 'System.IDisposable'。除此之外,在处理上下文时,所有智能感知支持都会丢失。

如果我输入context.BillableParts. intellisense支持在实体名称后停止。项目B无法看到Accu_CM_dbEntities应该像项目A那样是一次性的,究竟是什么原因?

namespace DAL
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

public partial class Accu_CRM_dbEntities : DbContext
{
    public Accu_CRM_dbEntities()
        : base("name=Accu_CRM_dbEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<BillablePart> BillableParts { get; set; }
    public virtual DbSet<BillableService> BillableServices { get; set; }
    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<Part> Parts { get; set; }
    public virtual DbSet<PartsManufacturer> PartsManufacturers { get; set; }
    public virtual DbSet<WorkOrder> WorkOrders { get; set; }
}

}

1 个答案:

答案 0 :(得分:0)

也许有关数据库的更多信息会更有用。我正在使用SQL Server compact。我在我的消费项目(EF项目的消费者)中使用了nuget并在sql compact中安装了EF,并且一切都已修复。我不是100%确定究竟是什么问题,但显然我没有引用正确的库。我将此处留给其他可能收到此错误的人