Entity Framework 4.1 - Code Сначала с существующей базой данных, как определить классы, используя атрибуты или EntityTypeConfiguration? В чем разница? - PullRequest
2 голосов
/ 23 сентября 2011

Я изучал EF в течение короткого времени и не могу найти ответ на этот вопрос. У меня есть база данных, и я использую CodeFirst для создания классов для модели.

Какая разница в использовании Атрибутов и EntityTypeConfiguration для определения параметров столбцов таблицы?

Поскольку в базе данных уже определены внешние ключи и уникальные ограничения и т. Д., Как и где реализовать проверку для получения лучшего и наиболее гибкого результата для использования в ASP.NET MVC3?

Лучше ли реализовать Атрибуты и CustomValidation или использовать TryCatch блоки для отлова ошибок из БД?

Имеет ли Validator.TryValidateObject (myModelObject, context, results, true); использует правила проверки, определенные только как Атрибуты , или может использовать правила, определенные в EntityTypeConfiguration

Спасибо

Ответы [ 3 ]

4 голосов
/ 23 сентября 2011

Получите Entity Framework Power Tools CTP1 , и он произведет обратный инжиниринг вашей базы данных и создаст объекты, а также полное отображение данных.Это отличается от модели или базы данных в первую очередь тем, что она генерирует беглую модель, а не использует файл .edmx.Тогда вы точно увидите, как это работает.

2 голосов
/ 23 сентября 2011

См. Следующую статью о том, как вы можете создать свои классы сущностей из существующей базы данных:

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

Шаблоны генерации кода сделают всю работу за вас, вам не нужно их писать, если у вас есть существующая база данных.

Для проверки вы можете создавать новые частичные классы в том же пространстве имен и помещать DataAnottations для ваших свойств. Вот пример для вас:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

namespace TugberkUgurlu.App1.DataAccess.SqlServer {

    [MetadataType(typeof(Country.MetaData))]
    public partial class Country {

        private class MetaData {

            [Required]
            [StringLength(50)]
            [DisplayName("Name of Country")]
            public string CountryName { get; set; }

            [Required]
            [StringLength(5)]
            [DisplayName("ISO 3166 Code of Country")]
            public string CountryISO3166Code { get; set; }

            [DisplayName("Is Country Approved?")]
            public string IsApproved { get; set; }

        }
    }
}
0 голосов
/ 23 сентября 2011

-Так как в базе данных уже определены внешние ключи и уникальные ограничения и т. Д., Как и где реализовать проверку для получения лучшего и наиболее гибкого результата для использования в ASP.NET MVC3?

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

   [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)]

Отношения уже являются частью вашей модели, поэтому вы сохраняете ссылочную целостность, и аннотации данных будут определять правила проверки.

-Лучше ли реализовывать атрибуты и CustomValidation или использовать блоки TryCatch для отлова ошибок из базы данных?

Реализация атрибутов. Определите ваши классы метаданных с вашими атрибутами в них. Кроме того, вы хотите перехватывать любые ошибки БД для всего, что является неожиданным, если в вашей БД есть дополнительная логика, не определенная в вашей модели (попытка catch на каком-то уровне обычно должна использоваться в любом случае для целей ведения журнала_

-Does Validator.TryValidateObject (myModelObject, context, results, true); использовать правила проверки, определенные только как атрибуты, или он может использовать правила, определенные в EntityTypeConfiguration?

Насколько я знаю, используются только атрибуты. Я попытаюсь проверить это позже, так как я также хотел бы получить определенный ответ на этот вопрос:)

...