Вставка различий в методах между EF4/6

Я только недавно начал использовать EF6. В прошлом для вставки объекта это был код, подобный этому фальшивому примеру (я пишу медицинское программное обеспечение, следовательно, жизненно важные функции):

using (DatabaseThingy ObjectContext = new DatabaseThingy(Connection))
{
     vitals pcrVital =  vitals.Createvital(0, pcrEntity.idPcr, timeTaken, pulse);
     ObjectContext.vitals.AddObject(pcrVital);
     ObjectContext.SaveChanges();
     return pcrVital;
}

Теперь все, что я читаю, говорит мне сделать это так:

using (DatabaseThingy ObjectContext = new DatabaseThingy(Connection))
{
    vitals pcrVital = new vitals(){
             idVitals = 0,
             idPcr = pcrEntity.idPcr,
             timeTaken = timeTaken,
             pulse = pulse
    };
    ObjectContext.vitals.Add(pcrVital);
    ObjectContext.SaveChanges();
    return pcrVital;
}

Первый метод не существует, когда я использую EF6. Преимущество первого метода заключается в том, что он будет автоматически создавать конструктор с минимальными (не допускающими обнуление) столбцами (редактировать), если EDMX был сгенерирован из уже существующей базы данных. Это простая вещь, чтобы проверить базу данных, чтобы увидеть, какие из них требуются, но автоматическое добавление списка в конструктор было замечательным.

Кто-нибудь знает причину этого, или я просто не смог найти, куда он переехал?

1 ответ

Решение

В EF4 это был ObjectContext, который использовался по сравнению с EF6, который использует DbContext. Шаблоны T4, которые сгенерировали код, отличаются между этими версиями, и более ранний конструктор по умолчанию больше НЕ доступен.

Классы POCO, созданные в EF6, намного легче и чище, чем в EF4. Боюсь, вам придется жить с этим самостоятельно.

Вы все еще можете получить доступ к ObjectContext в EF6 с помощью приведенного ниже кода и таких методов доступа, как AddObject.

(dbContext as IObjectContextAdapter).ObjectContext

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

Примечание: есть доступные шаблоны T4, которые могут дать вам более раннюю структуру классов с EF6, хотя это не может быть рекомендовано.

EF6 Entity Object Generator

Другие вопросы по тегам