实体框架6未使用属性正确映射我的列

时间:2018-04-23 20:45:53

标签: 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();

1 个答案:

答案 0 :(得分:1)

如果您在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();

修改 是出于好奇而进一步检查,如果您使用Column,则EF应该尊重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();