Entity Framework 4.1 сначала код для проверки - PullRequest
0 голосов
/ 03 июня 2011

Я новичок в Entity Framework, прочитал книгу Джули Лерман и много статей об этом.Имейте новый проект, в котором уже определены база данных и классы, поэтому решили использовать подход Code First (хотя это новый проект, поэтому база данных и классы очень похожи).

Итак, у нас есть: - слой базы данныхс сущностями, отображением и DbContext - классы (бизнес-уровень) - WPF с MVVM (уровень пользовательского интерфейса)

Если я правильно понимаю Code First, уровень базы данных ссылается на бизнес-уровень, пользовательский интерфейс ссылается как на базу данных, так и на бизнес-уровень.(Если я пытаюсь добавить в бизнес-уровне ссылку на уровень базы данных, я получаю циклическую ошибку ссылки.)

Базовая проверка, например, обязательное поле или длина, я понимаю, но где разместить дополнительные (более сложные) проверки, еслибизнес-уровень не знает о уровне базы данных?

Спасибо, Клэр

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Уровень базы данных не ссылается на бизнес-уровень, а уровень представления не ссылается на уровень базы данных.Это сломало бы весь смысл многоуровневой архитектуры.Правильное наслоение:

Database Layer -> Busienss Layer -> Presentation Layer

Что, вероятно, смущает вас - сущности.В простой архитектуре объекты распределяются между всеми слоями.Для этого вы должны поместить их в отдельную сборку, используемую всеми слоями.

Проверка может выполняться в любом слое:

  • Уровень представления может проверять пользовательский ввод - он может использовать методы избизнес-уровень для этого
  • бизнес-уровень должен обеспечивать соблюдение бизнес-правил, он также может предоставлять методы для пользовательского интерфейса для проверки пользовательского ввода
  • Уровень базы данных может проверять, соответствуют ли объекты ограничениям, определенным в базе данных (длянапример, обязательные столбцы заполнены)
1 голос
/ 03 июня 2011

вы можете выполнять сложные проверки в ваших классах сущностей, реализуя интерфейс IValidatableObject .Затем вы можете выполнить проверки внутри

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        //your validation logic. if there are no errors return an empty list
        return new System.Collections.Generic.List<ValidationResult>();
    }

EF 4.1 знает об этом интерфейсе.Поэтому он вызывает этот метод, прежде чем сохранить изменения.Если есть какие-либо ошибки проверки, это прервет транзакцию.

0 голосов
/ 03 июня 2011

Загляните в этот блог, чтобы получить больше информации о вашей структуре.

http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

Это должно помочь.

В блоге есть еще пара частей, над которыми стоит поработать,

http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx

http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx

Как правило, у вас есть возможность поставить проверку в нескольких местах. Ваши модели просмотра - одно место, чтобы сделать это. Бросить исключение ValidationException, например. Если вы используете сторонние элементы управления, такие как telerik, они автоматически обнаружат проблему с проверкой.

...