gpt4 book ai didi

c# - 有没有比这更好的方法来实现 Entity Framework +IDataErrorInfo 的模型验证?

转载 作者:行者123 更新时间:2023-11-30 17:58:48 25 4
gpt4 key购买 nike

目前,我有这个:

  • 通过 Entity Framework 生成模型分部类
  • 我自己的这个实体的部分类实现了 IDataErrorInfo 接口(interface)

然而,这是有效的:无论如何我可以将通用代码移动到其他类吗?最好的方法是什么?我们(在转向 Entity Framework 之前)曾经有一个“实体”类和一个 Poco。这个实体类从一些基类扩展而来,其中的接口(interface)实现如 IDataErrorInfo 。因为部分类的另一部分已经从 EntityObject 扩展,我不能使用这种方法,但我觉得再次编写每个部分类 80% 相同的代码是愚蠢的。唯一“真正”的区别是 Validate 方法的逻辑。

public partial class Customer : IDataErrorInfo, ICustomer
{
private readonly IDictionary<string, string> _errors = new Dictionary<string, string>();

public Customer()
{
base.
PropertyChanged += Model_PropertyChanged;
}

private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Validate();
}

private void Validate()
{
if (Name != null && Name.Equals("Banana"))
{
this[GetPropertyName(() => Name)] = "Some really nice error here";
}
}

#region "IDataErrorInfo"

public virtual string this[string columnName]
{
get
{
if (_errors.ContainsKey(columnName))
{
return _errors[columnName];
}
return null;
}
protected set
{
if (value == null && _errors.ContainsKey(columnName))
{
_errors.Remove(columnName);
}
else
{
if (_errors.ContainsKey(columnName))
_errors[columnName] = value;
else
_errors.Add(columnName, value);
}
}
}

public virtual string Error
{
get
{
if (_errors.Values.Count > 0)
{
return _errors.Values.First();
}
return null;
}
}
#endregion

public static string GetPropertyName<T>(Expression<Func<T>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return body.Member.Name;
}
}

最佳答案

关于c# - 有没有比这更好的方法来实现 Entity Framework +IDataErrorInfo 的模型验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com