【问题标题】:Referencing an Entity column using a string variable使用字符串变量引用实体列
【发布时间】:2015-01-29 16:17:09
【问题描述】:

我正在尝试为使用 Entity Framework 的应用程序创建数据驱动的验证。
在我的验证表中,我想存储:

  • 字段名称(FreightToBillCustomer)
  • 验证条件 (>)
  • 验证值 (5)
  • 错误消息(运费到帐客户必须小于 5)
  • 会员名(FreightToBillCustomer)

我将在下面使用这些。

if (  FreightToBillCustomer > 5)
{ 
    ValidationResult vr = new ValidationResult("Freight to bill customer must  be less than 5",new[] { "FreightToBillCustomer" });
    errors.Add(vr);
}

当我将字段名称作为字符串变量传递时,我的问题出现了,我如何翻译/转换为实体框架识别的列。我的目标是获取验证记录列表并在实体的部分类中循环它们并在 SaveChanges() 事件之前执行验证。

【问题讨论】:

  • 您坚持到实体框架的对象没有什么特别之处。它们是普通对象,当您加载或保存它们时,EF 将以某种方式处理它们。这意味着您可以使用与任何其他 POCO 相同的反射或表达技术。在构建自己的验证库之前检查现有的验证库,例如 FluentValidation
  • 感谢您的快速响应。我是 WPF 和实体框架的新手,所以如果我的要求看起来很简单,请原谅我。我研究了 FluentValidation 并打开了一个全新的世界。我还是看不到如何将字符串变量转换为实体框架列。

标签: c# entity-framework validation


【解决方案1】:

你可以使用这样的代码:

var assembly = typeof(NameOfAnyClassInTheAssembly).Assembly;

string typeName = NameOfClass;
var type = assembly.GetType(typeName);

// Create an instance of this type
var instance = Activator.CreateInstance(type);

// Get the property of this type
var property = type.GetProperty("NameOfProperty");

// Fetch the property value
var propertyValue = property.GetValue(instance, null);

只需将 NameOf.... 变量替换为您的变量即可。

有关工作示例,请参见以下链接:

Reflection example

【讨论】:

  • 是的。只需使用普通的反射即可。
  • 太好了,感谢您的课程。我现在唯一的问题是如何从房产中获取价值。例如,如果我正在进行验证并且字段
  • 使用类似 var propertyValue = property.GetValue(instance, null) 来获取属性值。我已将代码添加到我的答案中。
  • 当我知道有一个值时我得到一个空值。
  • 我在我的答案底部添加了一个指向反射示例的链接。
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
相关资源
最近更新 更多