Entity Framework v4: предотвращение перезаписи модели хранилища с помощью мастера обновления модели - PullRequest
7 голосов
/ 18 июля 2010

В моем проекте Entity Framework v4 у меня есть таблица с двумя столбцами, которые вычисляются базой данных (с помощью триггеров и т. Д.). Чтобы EF правильно вставлял записи в таблицу, мне нужно вручную пометить столбцы как «вычисленные» в модели хранения EF (атрибут StoreGeneratedPattern), что не поддерживается конструктором - поэтому мне нужно сделать вручную редактирует XML в файле .EDMX.

Проблема заключается в том, что всякий раз, когда меняется моя схема базы данных, и мне нужно обновить модель хранилища в моем проекте, «Мастер обновления модели» перезаписывает весь раздел «Модель хранилища» .EDMX, исключая мои ручные изменения. Это означает, что я должен хранить специальный список таких изменений и вручную повторно применять их КАЖДЫЙ РАЗ, когда я делаю обновление! Ради любви к Богу, это должно быть одним из самых глупых сбоев в EF.

В любом случае, мой вопрос относительно улья заключается в следующем ... Есть ли способ предотвратить перезапись модели хранилища? Есть ли способ пометить столбцы в базе данных, чтобы EF автоматически помечал их как вычисленные? В крайнем случае, это действительно ДЕЙСТВИТЕЛЬНО ЛЕГКИЙ инструмент / метод XML, который может автоматически применять изменения после каждого обновления?

СПАСИБО, о, учёные, авторы StackOverflow, за то, что ослабили мою боль и помогли мне решить эту проблему, хотя у меня пока нет статуса на сайте. Когда-нибудь, когда у меня будет репутация из 4+ цифр, я буду помнить вас.

Brian


Обновление

Инсайдер сказал мне, что одним из решений может быть проверка «Designer Power Pack» (ссылка ниже), которая позволяет вам настроить генерацию модели хранилища. Пока я только просмотрел информацию, но мне кажется, что может быть день или два обучения, чтобы понять это. У кого-нибудь есть опыт работы с Designer Power Pack или какие-либо другие идеи?

http://blogs.msdn.com/b/adonet/archive/2010/02/08/entity-designer-database-generation-power-pack.aspx

Еще раз спасибо, Brian

Ответы [ 6 ]

1 голос
/ 05 января 2015

Для googlers, которые находят здесь свой путь, эту проблему можно решить с помощью частичных классов.См. этот SO Ответ для более подробной информации.Я цитирую @Mugan в комментариях вверху фрагмента.

//The generated class 'MyClass' will always be a partial class. 
//This allows you to write second partial class which is marked with 
//the necessary data annotations. 

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

//make sure the namespace is equal to the other partial class MyClass
namespace MvcApplication1.Models 
{
    [MetadataType(typeof(MyClassMetaData))]
    public partial class MyClass
    {
    }

    public class MyClassMetaData
    {
        [Required]
        public int MyClassId {get;set;}

        //...
    }
}
1 голос
/ 22 июля 2010

По словам команды EF в Microsoft, в настоящее время это самая большая жалоба со стороны клиентов, а также ошибка с наивысшим приоритетом.

Они говорят, что разработали решение и планируют выпустить его со следующим выпуском Visual Studio, скорее всего VS 2010 SP1, но дата пока не указана.

К сожалению, ни один источник не нашел хорошего обходного пути, но я все еще открыт для идей!

Brian

0 голосов
/ 27 июня 2013

Я столкнулся с той же проблемой в моем приложении, я использовал База данных сначала , что заставило меня столкнуться с этой проблемой.Я преодолел эту проблему, используя Code first Approach .Вы также можете использовать это, дизайнер, вероятно, большое время.

Вы также можете использовать "Reverse Engineer Code First" , который является командой от EF Power Tools, это поможет вам получитьМодель готова как можно скорее.Теперь вы можете изменить модель в соответствии с вашими потребностями или отношениями, но недостатком является то, что у вас не может быть дизайнера в этом подходе, вы должны изменить каждую вещь вручную.Это не так сложно, даже ...

0 голосов
/ 30 июля 2010

Вы можете сгенерировать файл edmx, используя альтернативный конструктор, такой как в LlblGenPro v3.0. Сверху головы я не знаю, насколько хорошо он поддерживает вычисляемые столбцы. Но если вы спросите на форумах поддержки http://www.llblgen.com/tinyforum/, вы получите быстрый и точный ответ. Если случайно эта функция не поддерживается, возможно, они могут добавить ее в следующем выпуске. Их цикл доставки намного короче, чем у MS.

Кстати, конструктор LlblGenPro поддерживает не только Entity Framework v4 и V1, но и NHibernate, Linq to Sql и собственную среду выполнения LlblGenPro.

0 голосов
/ 29 июля 2010

Я только что выпустил инструмент, который может вам помочь: «компаратор моделей» для моделей EFv4.Он является частью моего пакета надстроек Huagati DBML / EDMX Tools для Visual Studio и показывает различия между уровнями базы данных, SSDL и CSDL.Вы можете выбрать отдельные различия и перенести их на противоположный (ые) слой (и) или добавить различия, которые вы не хотите выводить в список игнорирования.

При переносе изменений обновляются только затронутые частимодели;несвязанные и неизмененные части остаются нетронутыми.

Вы можете загрузить его и получить пробную лицензию от http://huagati.com/dbmltools/, если хотите попробовать.

Huagati EDMX Tools Model Comparer for EFv4

0 голосов
/ 18 июля 2010

Делая снимок в темноте, но рассматривали ли вы вопрос об использовании представления для таблицы - минус два вычисляемых столбца - и не добавление таблицы в модель?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...