Я хочу реализовать несколько расширений для платформы Entity. Давайте встретим это в качестве примера.Извлечь информацию о модели из Entity Framework 4.3 - 5
void InsertOrUpdate<T, TUpdateFields, TInsertFields, TKey>(
this DbContext context,
IEnumerable<T> data,
Expression<Func<T, TUpdateFields>> updateFields,
Expression<Func<T, TInsertFields>> insertFields,
Expression<Func<T, TKey>> key)
И предполагается, что это будет использоваться.
var dc = new SomeContext();
var user = new User() { /* initialize */ };
var array = new[] { user };
dc.InsertOrUpdate(
array,
x => new {
x.UserName,
x.Password,
x.LastLoggedIn
},
x => new {
x.UserName,
x.Password,
x.Email,
x.DateAdded,
x.LastLoggedIn
},
x => x.UserName);
метод будет генерировать SQL строку и передать его в метод DbContext.Database.ExecuteSqlCommand
. Но для создания sql мне нужно извлечь имена таблиц и полей из информации о модели, если они отличаются от имен классов и свойств.
(например UserName
свойство соответствует user_name
поля в БД)
Я знаю, что они могут быть установлены в самой как аннотации данных, определенных в ModelBuilder непосредственно в OnModelCreating(DbModelBuilder)
методом из DbContext
или определенных в форме лица от EntityTypeConfiguration<T>
и переданы в конфигурацию построителя модели тем же методом.
Как получить имена таблиц и полей из экземпляра DbContext? Возможно ли вообще?