2015-01-30 8 views
0

Я работаю над трехуровневым приложением. Я добавил таблицу Linq to SQL (LEAVE) с помощью O/R Designer. Я добавил метод ниже для извлечения данных из таблицы (LEAVE) в классе (LeaveRecord) в бизнес-слое.Скомпилировать ОШИБКУ: Тип определен в сборке, на которую нет ссылок

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

На слое пользовательского интерфейса, в коде позади на веб-форму, я пытался получить данные, как это:

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). 

Как решить эту проблему?

ответ

2

Наиболее простым решением является добавление ссылки на dal из проекта пользовательского интерфейса.

+0

Спасибо Iswanto. Любой пример кода о том, как это сделать? Спасибо. – Chibuzo

+0

Я попробовал «Использование projectname.dal;», но я получаю ошибку, что тип или пространство имен «dal» не существует в пространстве имен «projectname». – Chibuzo

+1

есть ли ссылка на dal из проекта ui? В своем браузере решений перейдите в проект ui, щелкните правой кнопкой мыши по ссылке, выберите проект -> dal. –

2

Вы подвергаете dal типам данных от вашего bll. Таким образом, если кто-то хочет потреблять то, что API bll (то есть ваш пользовательский интерфейс) должен также ссылаться на dal.

Так у вас есть выбор ссылок на вашем dal от вашего UI или делают переключатель типа данных в bll и подвергая новый тип данных, который определен в bll.

+0

Спасибо за Ваш ответ. Я довольно новичок в ASP.NET. Пожалуйста, вы можете показать мне пример небольшого кода. Спасибо. – Chibuzo

+0

Это архитектурное решение. Единственный применимый код - вы хотите, чтобы новый тип данных в вашем bll или вы хотите, чтобы вызывающие абоненты bll должны были ссылаться на dal. –

+0

Я не знаю последствий какого-либо решения. Вы в лучшем положении можете предложить мне, какой из них использовать и как это сделать. Я просто хочу, чтобы он работал. Спасибо за ваше время. – Chibuzo

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)); 
}