我正在使用 EF6 从数据库中查询数据。数据库在代码之前就已经存在,并且属于另一个应用程序,所以我根本无法修改数据库。我相信我正在使用代码优先方法,即使数据库已经存在(请原谅我,因为我是 EF 的新手)。问题是我无法为按如下方式设置的列提取数据;
[Column("ITEM_QTY")]
public decimal ItemQuantity { get; set; }
现在,如果我将该属性重命名为 ITEM_QTY,它会正确提取数据。我不确定我错过了什么。我可以正确地从任何其他字段中提取数据,但无论数据库中有什么,该字段都返回 0。谁能给个方向?
在另一次讨论中,有人提出了列名中的下划线可能存在的问题。不确定是否可以,但添加信息。谢谢。
编辑:添加用于查询数据库的代码。请注意,这是在我开始处理该项目之前设置的,因此遵循相同的约定;
var t = this.Database.SqlQuery<InventoryDb>("select top 100 * from COMPANY_INVENTORY with (NOLOCK) where COMPANY = @CompanyName",
new SqlParameter("CompanyName", companyName)).ToList();
最佳答案
你的 Column
如果您使用自定义 SqlQuery<T>
属性将被忽略在 DbContext
上.您需要传递带有与您的实体匹配的属性名称别名的 Sql 语句。
var t = this.Database.SqlQuery<InventoryDb>("select top 100 Item_QTY as [ItemQuantity], ... other columns ... from COMPANY_INVENTORY with (NOLOCK) where COMPANY = @CompanyName",
new SqlParameter("CompanyName", companyName)).ToList();
编辑:
出于好奇而进一步检查,似乎 EF 应该尊重 Column
如果您使用 DbSet.SqlQuery
属性反而。不过我还没有尝试过。 ( https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=vs.113).aspx )
var t = this.Inventory.SqlQuery("select top 100 * from COMPANY_INVENTORY with (NOLOCK) where COMPANY = @CompanyName",
new SqlParameter("CompanyName", companyName)).ToList();
关于c# - Entity Framework 6 未使用属性正确映射我的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989681/