我将数据保存到数据库时目前有很多if语句,因为Column动态更改。如果我可以使用“name”字符串动态更改我需要保存的列,那么我的代码会更有效率。
if (String.Compare(name, "MWSAccessKeyID", StringComparison.Ordinal) == 0)
{
var DBobj = db.AccountsConfigDatas.Find(0);
DBobj.MWSAccessKeyID = NewValue;
db.Entry(DBobj).State = EntityState.Modified;
db.SaveChanges();
}
我曾尝试过:我已经研究了这个主题了几个小时。我相信我使用了错误的搜索字词,因为那里没有很多。我尝试使用LINQ中的名称字符串查找列。
var Column = DBobj
.Where(e == name)
.Select(e)
.FirstOrDefault();
DBobj.Column = NewValue;
db.Entry(DBobj).State = EntityState.Modified;
db.SaveChanges();
来自社区的任何建议或文档都会非常有用。
似乎X-editable强制您按名称更新属性。在我看来,您的架构不应该允许UI库的特性渗透到应用程序代码的更深层区域。建议在控制器和DAL(或服务)之间使用抽象/映射层。
无论如何,只要您没有,使用Entity Framework就可以轻松地按名称修改属性。不需要反映,因为EF已缓存实体模型的元数据:
var dbObj = db.AccountsConfigDatas.Find(id);
db.Entry(dbObj).CurrentValues[propertyName] = newValue;
db.SaveChanges();
这会按名称更新一个属性,并将此单个属性标记为已修改,因此只有此属性才会出现在update语句中。将实体的状态设置为已修改是不好的做法,因为它会生成包含其所有属性的更新语句。
var DBobj = db.AccountsConfigDatas.Find(0);
var propertyInfo = DBobj.GetType().GetProperty(name);
propertyInfo.SetValue(DBobj, NewValue);
db.Entry(DBobj).State = EntityState.Modified;
db.SaveChanges();