Ошибка ссылки сборки с C# EF4 и многоуровневым дизайном

Наконец-то я приступил к проверке последней версии EF и столкнулся с некоторыми проблемами при тестировании.

Итак, мой слой DAL содержит мой файл.EDMX, и я использую шаблон MS POCO, поэтому у меня также есть сгенерированные файлы и классы.TT.

У меня есть базовый базовый класс в TestProject.DAL, из которого я создал эти классы. Т.е.

public class BaseEntity<T> {}
public class Customer : BaseEntity<Customer> {}
public class Product : BaseEntity<Product> {}

Затем в моем слое TestProject.BLL у меня есть некоторые производные классы, т.е.

public class TestProject.BLL.Customer : TestProject.DAL.Customer {}
public class TestProject.BLL.Product : TestProject.DAL.Product {}

Затем в своем слое пользовательского интерфейса я вызываю объект BLL.Customer. Я получаю сообщение о том, что ссылка на объект DAL.Customer не добавлена ​​и т. Д.

У меня есть ссылка на проект BLL из моего проекта пользовательского интерфейса и ссылка на DAL из моего проекта BLL.

Почему уровень пользовательского интерфейса жалуется на то, что ему известен уровень DAL, когда на него нет ссылок в этом проекте?

Кроме того, в качестве дополнительного вопроса, это выглядит как "хороший" дизайн?

Спасибо всем! неуравновешенный

2 ответа

Решение

Крейг прав - ваш пользовательский интерфейс ссылается на типы объектов POCO. Но я уточню немного больше.

Если вы оказались в ситуации, когда ваш проект пользовательского интерфейса ссылался на сборку BLL, а эта сборка ссылалась на сборку DAL и не публично выставляла какие-либо элементы из этой сборки DAL, то то, что вы говорите, будет правильным. Но это не то, что здесь происходит. Вы ссылаетесь на сборку BLL, и типы в этой сборке непосредственно наследуются от типов DAL, и поэтому типы DAL являются общедоступными для вашего пользовательского интерфейса. Поэтому компилятор (правильно) говорит вам, что вы должны ссылаться на сборку DAL из вашего проекта пользовательского интерфейса.

Что касается вашего вопроса "хорошего дизайна", это всегда зависит от контекста. Не зная вашего контекста, я бы не стал создавать дерево наследования, подобное этому. Какова работа ваших подклассов в сборке BLL?

Ваш пользовательский интерфейс ссылается на типы объектов POCO - через параметр универсального типа на BaseEntity,

Другие вопросы по тегам