Проблема отображения таблиц - PullRequest
1 голос
/ 04 апреля 2011

Я использую Entity Framework 4 в моем текущем проекте, чтобы прочитать данные из нескольких таблиц.Сравните с использованием ADO.net, это EF очень легко, с простым кодом, который может сделать много работы или я.

Но есть одна проблема ...

e, g есть иВыход из таблицы вызывает таблицу «MTable». Я хочу запросить только два столбца из этой таблицы, однако эта таблица используется совместно с двумя другими пользователями, которые также работают над ней.они могут добавить столбец или изменить ограничения для этой таблицы.Я уверен только в одном: два столбца, которые я хочу запросить, не удаляют и не переименовывают его.

Мое приложение работает сейчас, но время от времени оно прерывается, поскольку я генерирую код из базы данныхсхема, каждый раз, когда кто-то делает какое-то обновление для "MTable", мне нужно обновить отображение моего приложения.

Есть ли способ сделать сопоставление "Code-fist", позвольте мне написать простой режимсопоставить с «MTable», и сопоставить только два столбца, так что я могу независимо от того, что другие ppl делают на «MTable» ???

Спасибо

Ответы [ 4 ]

1 голос
/ 04 апреля 2011

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

DbContext API! = Первый подход к коду.Люди должны различаться между отображением Fluent / Annotations и подходом, основанным на коде, когда база данных генерируется из кода.Если вы генерируете код из базы данных, вы, очевидно, используете первый подход к базе данных.

Решение для базы данных сначала: представление базы данных, но оно сделает вашу сущность доступной только для чтения.Имхо у тебя не должно возникнуть проблем, даже если таблица изменится.Если вам нужны только два столбца, и никто не изменит эти два столбца или создаст новые необходимые столбцы, ваш сопоставленный объект все равно должен работать.Если кто-то изменит ваш столбец, не будет эффективного способа избежать взлома вашего кода.

Вы также можете использовать расширенные функции EDMX, такие как QueryView (просмотр в описании отображения) и DefiningQuery (выбор пользователя в описании хранения), ноВероятно, это слишком для вашего сценария.

Решение для первого кода: отключите проверку метаданных модели и инициализацию базы данных.Требуется установить инициализатор на null:

// Use this code in the application start up
Database.SetInitializer<MyContext>(null);

и удалить IncludeMetadataConvetion:

public class MyContext : DbContext
{
    ...

    protedte override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();   
    }
}

В обоих подходах вы также можете использовать пользовательский запрос SQL или пользовательскую проекцию linq.

1 голос
/ 04 апреля 2011

Я не пробовал этого, поэтому я не могу сказать, что он будет работать с EF, но не могли бы вы определить прямой выбор двух столбцов, которые вы хотите, и, возможно, первичный ключ (если первичный ключ не ' t один из двух столбцов), а затем создайте свою модель EF по виду.

Так мы бы изолировали стабильную производственную систему от текущих изменений в других колонках в старые добрые времена.

1 голос
/ 04 апреля 2011

Entity Framework на самом деле не является идеальным выбором для схемы базы данных, которая все еще изменяется - после всей абстракции, с которой вы имеете дело, это сущности , которые отражают схему таблицы, поэтому, если она меняется, она сломается EF. Однако ничто не мешает вам использовать запрос магазина, чтобы получить два столбца и сопоставить его с пользовательским классом, свойства которого соответствуют именам нужных столбцов:

class  MyColumns
{
  public string Column1 {get;set;}
  public string Column2 {get;set;}
}

...

using(var context = new FooEntities())
{
   var results = context.ExecuteStoreQuery<MyColumns>("select Column1, Column2 from MTable");
}
0 голосов
/ 04 апреля 2011

При работе с EF со средними и большими группами мы выбираем создание проекта базы данных или просто сценарий sql для создания базы данных / тестовых данных.С этим файлом в системе контроля версий, когда член команды изменяет базу данных, каждый получает последний скрипт / проект, а также новый edmx, и все должно работать.

...