Я только начал использовать EntityFramework 6 и все еще пробую некоторые сценарии.Я переопределил метод OnModelCreating () в своем классе контекста и имею некоторую логику в отношении некоторых отображений имен столбцов в свойствах, таких как:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("public");
modelBuilder.Entity<Ninja>().Property(x => x.DateOfBirth).HasColumnName("date_of_birth");
}
Как вы можете видеть, имя свойства - DateOfBirth, и соответствующий столбец вБД является date_of_birth.Теперь, когда я добавляю / вставляю новые данные в БД, это отображение работает нормально.И когда я запрашиваю / извлекаю данные следующим образом:
var ninja = context.Ninjas.FirstOrDefault(n => n.Name.StartsWith("Kacy"));
Это прекрасно работает.
Но когда я хочу использовать функцию DB (postgre 10) для извлечения данных:
private static void RetrieveDataWithStoredProc()
{
using (var context = new NinjaContext())
{
context.Database.Log = Console.WriteLine;
var ninjas = context.Ninjas.SqlQuery("select * from get_old_ninjas()").ToList();
}
}
Я получаю следующее исключение:
The data reader is incompatible with the specified 'NinjaDomain.DataModel.Ninja'.
A member of the type, 'DateOfBirth', does not have a corresponding column in the data reader with the same name.
Это означает, что он не учитывает логику в конструкторе моделей в отношении имени столбца свойства DateOfBirth.Если я добавлю явную логику отображения после SqlQuery, она будет работать ...
Мой вопрос заключается в том, почему этот метод не учитывает логику, уже существующую в методе OnModelCreating
, как во всех других случаях?