C#实体框架6在参数中指定表的属性

C#实体框架6在参数中指定表的属性,c#,parameters,entity-framework-6,C#,Parameters,Entity Framework 6,我的应用程序必须更新数据库中的许多参数(在不同的表中,参数是无序的)。我只是读取了一个标签(名称)和一个值,并且必须根据名称将值存储在数据库中的正确位置 现在我使用switch(),但这个解决方案似乎不太好,因为每个参数的处理方式都不同,将来可能会变得很重(我有500多个参数) 这是代码(现在带开关) 您知道如何在参数中指定我要更新的表的哪个属性吗:m12、m14、m16。。。(所以我不需要使用开关) 谢谢 您应该能够通过反射来完成: private void MyFunc(int id, in

我的应用程序必须更新数据库中的许多参数(在不同的表中,参数是无序的)。我只是读取了一个标签(名称)和一个值,并且必须根据名称将值存储在数据库中的正确位置

现在我使用switch(),但这个解决方案似乎不太好,因为每个参数的处理方式都不同,将来可能会变得很重(我有500多个参数)

这是代码(现在带开关)

您知道如何在参数中指定我要更新的表的哪个属性吗:m12、m14、m16。。。(所以我不需要使用开关)


谢谢

您应该能够通过反射来完成:

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);