我正在使用實體框架5(使用代碼優先方法)從具有參數的舊式存儲過程填充我的類,並且此工作正常(詳細內容如下)。 我的問題是我想將列的名稱映射到具有不同名稱的屬性(我不喜歡來自Erp的名稱)。 我試圖用一個配置類(比如當我映射到視圖或表我做什麼),以用於不同的名稱屬性指定的列名,這裏是我的結果:實體框架代碼優先 - 爲SqlQuery配置映射
- 如果我不使用配置類(我沒有將它添加到DbContext的OnModelCreating方法中),那麼EF工作,但只加載與列的名稱完全匹配的屬性(這是我在這種情況下預期的);其他財產爲空;
- 如果我使用配置類(將它添加到DbContext的OnModelCreating方法中的modelBuilder中),那麼EF會引發一個異常,指出「數據讀取器與指定的'... Item'不兼容。類型'描述'在數據讀取器中沒有相應的列,名稱相同「,這對我來說聽起來很奇怪,因爲在配置中,我指定將屬性描述映射到列ItemDescription。
爲什麼配置影響我的結果,但它的規格不用於映射列?有沒有另一種方法來指定使用SqlQuery的這種映射?
下面是詳細信息:
我的POCO類:
public class Item
{
public String Id { get; set; }
public String Description { get; set; }
}
的配置類:
public class ItemConfiguration : EntityTypeConfiguration<Item>
{
public ItemConfiguration()
{
HasKey(x => new { x.Id });
Property(x => x.Id).HasColumnName("Code");
Property(x => x.Description).HasColumnName("ItemDescription");
}
}
的存儲過程中的列返回數據 「守則」 和「ItemDescription 「;我把它用這種方式:
var par = new SqlParameter();
par.ParameterName = "@my_par";
par.Direction = ParameterDirection.Input;
par.SqlDbType = SqlDbType.VarChar;
par.Size = 20;
par.Value = ...;
var data = _context.Database.SqlQuery<Item>("exec spItem @my_par", par);
,並與該我的配置添加到上下文:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ItemConfiguration());
}
謝謝!
我很高興這篇文章。我一直在和我一起奮鬥,我需要的只是'exec'部分。我發現了很多例子,而且沒有'exec'部分。 –