c# - Entity Framework 6 未使用属性正确映射我的列

标签 c# .net entity-framework entity-framework-6

我正在使用 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/

相关文章:

c# - WCF 集合数据契约

.net - "Unable to connect to the remote server"发送推送通知时出现异常

c# - Entity Framework 迁移重命名表和列

c# - 指定的 LocalDB 实例不存在

c# - 如何从 VB.NET 中的事件中获取实际的 EventHandler 委托(delegate)实例?

c# - 使用 HTTP PUT 上传的文件在开头和结尾有额外的数据

c# - 从数据库获取不带空值的字符串值 C#

c# - 如何以编程方式创建 MSI 安装程序?

c# - .NET 类重构困境

c# - 我是否了解 ASP.NET MVC 和 Entity Framework 的架构设计?