Ошибка ссылки сборки с C # EF4 и многоуровневым дизайном - PullRequest
0 голосов
/ 30 сентября 2010

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

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

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

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

Тогда в моем слое TestProject.BLL у меня есть несколько производных классов. * 1008 Т.е. *

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

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

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

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

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

Спасибо всем! Goosey

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

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

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

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

1 голос
/ 30 сентября 2010

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

...