编译错误:类型在未引用的程序集中定义

时间:2015-01-30 03:01:33

标签: c# linq .net-assembly 3-tier

我正在开发一个3层应用程序。我使用O / R Designer添加了Linq to SQL表(LEAVE)。我添加了下面的方法,用于从业务层的类(LeaveRecord)中的表(LEAVE)中检索数据。

public IQueryable<LEAVE> getLeaves()
{
    dbContext db = new dbContext;
    return db.LEAVEs;
}

在UI层,在webform后面的代码中,我试图得到这样的数据:

bll.LeaveRecord leaveRecords = new bll.LeaveRecord();
var data = leaveRecords.getLeaves(); // the error message highlights this line (41) as the offender

当我运行程序时,出现编译错误:

The type 'programname.dal.LEAVE' is defined in an assembly that is not referenced. You must add a reference to assembly 'programname.dal, version=1.0.0.0, Culture=neutral, PublicKeyToken=null' (Line 41).

如何解决此问题?

3 个答案:

答案 0 :(得分:2)

您正在展示dal中的bll数据类型。因此,如果有人想要消费,那么bll API(即您的UI)也需要引用dal

因此,您可以选择引用dal中的UI或在bll中执行数据类型切换,并公开bll中定义的新数据类型}。

答案 1 :(得分:2)

最简单的解决方案是在UI项目中添加对dal的引用。

答案 2 :(得分:0)

您必须封送数据对象:

public DaoLeave
{
    // Properties of DaoLeave, same as properties of LEAVE

    internal void DaoLeave(LEAVE doLeave)
    {
        // set properties from properties ... alternately, use something like AutoMapper
    }
}

public IQueryable<DaoLeave> getLeaves()
{
    dbContext db = new dbContext;
    return db.LEAVEs.Select(l => new DaoLeave(l));
}