Retrieve/Update EF 实体使用列的字符串表示形式 - 代码优先
Retrieve/Update EF Entity using string representation of column - code first
更新:我试图在不知道列的情况下更新 EF 实体,直到 运行 时间。所以我希望我的前端 post 到我的 api 有一个列名和它的值,然后让我的 api 通过以下方式更新数据库:
- 查找要更新的列(使用提供的字符串)
- 使用提供的值更新数据库
所以在我的 webapi 控制器中给出以下数据:
string colName = 'firstName';
string colValue = 'Sam';
在我的 EF 数据检索中,而不是
var user = db.Users.Where(x => x.firstName == colValue); //firstName is actual column name
我可以做类似的事情吗
var user = db.Users.Where(x => x.'colName' == x.colValue); //colName is the string representation of column
并以某种方式更新此给定列,例如:
user.colName = colValue; //where colName = 'firstName'
而不是
user.firstName = colValue;
我对反射进行了相当多的研究,但我不确定从哪里开始,或者这样的任务是否可行。
我可以像这样使用循环来检索类似的数据:
foreach(var x in User.GetType().GetProperties()) {
if(x.ToString() == colName)
{
var y = db.User.Where(z => z.firstName == colValue)
}}
如有任何指点、建议或意见,我们将不胜感激!
这不可能吗?
抱歉,问题看错了,这里是更新后的答案。您需要使用:
var e = db.Entry(new User() {Id =1, Name = "test"});
var property = e.CurrentValues.PropertyNames.FirstOrDefault(p => p == colName);
e.CurrentValues[property] = colValue;
更新:我试图在不知道列的情况下更新 EF 实体,直到 运行 时间。所以我希望我的前端 post 到我的 api 有一个列名和它的值,然后让我的 api 通过以下方式更新数据库:
- 查找要更新的列(使用提供的字符串)
- 使用提供的值更新数据库
所以在我的 webapi 控制器中给出以下数据:
string colName = 'firstName';
string colValue = 'Sam';
在我的 EF 数据检索中,而不是
var user = db.Users.Where(x => x.firstName == colValue); //firstName is actual column name
我可以做类似的事情吗
var user = db.Users.Where(x => x.'colName' == x.colValue); //colName is the string representation of column
并以某种方式更新此给定列,例如:
user.colName = colValue; //where colName = 'firstName'
而不是
user.firstName = colValue;
我对反射进行了相当多的研究,但我不确定从哪里开始,或者这样的任务是否可行。
我可以像这样使用循环来检索类似的数据:
foreach(var x in User.GetType().GetProperties()) {
if(x.ToString() == colName)
{
var y = db.User.Where(z => z.firstName == colValue)
}}
如有任何指点、建议或意见,我们将不胜感激! 这不可能吗?
抱歉,问题看错了,这里是更新后的答案。您需要使用:
var e = db.Entry(new User() {Id =1, Name = "test"});
var property = e.CurrentValues.PropertyNames.FirstOrDefault(p => p == colName);
e.CurrentValues[property] = colValue;