【发布时间】:2016-11-01 21:21:49
【问题描述】:
C#菜鸟。下面是我的代码,现在已经尝试了几个小时来更新我的数据库中的一些字段,并尝试了许多不同的实现,但没有运气。
// Select all fields to update
using (var db = new Entities())
{
// dbFields are trusted values
var query = db.tblRecords
.Where("id == " + f.id)
.Select("new(" + string.Join(",", dbFields.Keys) + ")");
foreach (var item in query)
{
foreach (PropertyInfo property in query.ElementType.GetProperties())
{
if (dbFields.ContainsKey(property.Name))
{
// Set the value to view in debugger - should be dynamic cast eventually
var value = Convert.ToInt16(dbFields[property.Name]);
property.SetValue(item, value);
// Something like this throws error 'Object does not match target type'
// property.SetValue(query, item);
}
}
}
db.SaveChanges();
}
上面的代码在运行时不会对数据库产生任何变化。显然,这段代码需要一些清理,但我正在尝试让基本功能正常工作。我相信我可能需要做的是以某种方式将“项目”重新应用到“查询”中,但无论我尝试什么实现,我都没有运气让它工作,我总是收到“对象与目标类型不匹配” .
这个半相似的问题重申了这一点,但对我来说不是很清楚,因为我使用的是动态 LINQ 查询并且不能直接引用属性名称。 https://stackoverflow.com/a/25898203/3333134
【问题讨论】:
-
你为什么需要这个
Select("new ...?如果您删除Select,您将拥有来自tblRecords的实体。更改这些将导致 EF 跟踪的更改。
标签: c# entity-framework-6 dynamic-linq