我正在开发一个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).
如何解决此问题?
答案 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));
}