C#实体框架6在参数中指定表的属性
我的应用程序必须更新数据库中的许多参数(在不同的表中,参数是无序的)。我只是读取了一个标签(名称)和一个值,并且必须根据名称将值存储在数据库中的正确位置 现在我使用switch(),但这个解决方案似乎不太好,因为每个参数的处理方式都不同,将来可能会变得很重(我有500多个参数) 这是代码(现在带开关) 您知道如何在参数中指定我要更新的表的哪个属性吗:m12、m14、m16。。。(所以我不需要使用开关)C#实体框架6在参数中指定表的属性,c#,parameters,entity-framework-6,C#,Parameters,Entity Framework 6,我的应用程序必须更新数据库中的许多参数(在不同的表中,参数是无序的)。我只是读取了一个标签(名称)和一个值,并且必须根据名称将值存储在数据库中的正确位置 现在我使用switch(),但这个解决方案似乎不太好,因为每个参数的处理方式都不同,将来可能会变得很重(我有500多个参数) 这是代码(现在带开关) 您知道如何在参数中指定我要更新的表的哪个属性吗:m12、m14、m16。。。(所以我不需要使用开关) 谢谢 您应该能够通过反射来完成: private void MyFunc(int id, in
谢谢 您应该能够通过反射来完成:
private void MyFunc(int id, int value, string name_param)
{
using (var db = new mydatabaseEntities())
{
var result = db.mytable.Where(b => b.id == id).First();
var prop = result.GetType().GetProperty(name_param);
if (prop == null)
throw new InvalidOperationException(); //Or something appropriate
prop.SetValue(result, value);
db.SaveChanges();
}
}
请注意,这会使用反射,并且对于执行许多操作来说可能会很慢。通过缓存类型信息和属性,可以稍微加快速度
顺便说一下,如果您的name\u参数
大小写与属性名称不同,可以使用LINQ缩小范围:
var prop = result.GetType()
.GetProperties()
.Where(p => string.Compare(p.Name, param_name, true) == 0)
.FirstOrDefault();
或者只使用正确的绑定标志:
var prop = result.GetType().GetProperty(name_param,
BindingFlags.IgnoreCase |
BindingFlags.Public |
BindingFlags.Instance);
这么简单..我已经用方法处理这个GetProperty()一个小时了:你的更好,可能更快。非常感谢你
var prop = result.GetType().GetProperty(name_param,
BindingFlags.IgnoreCase |
BindingFlags.Public |
BindingFlags.Instance);