gpt4 book ai didi

c# - 如何在通用实体上设置属性?

转载 作者:可可西里 更新时间:2023-11-01 08:54:44 26 4
gpt4 key购买 nike

我想检查一个实体是否有 3 个属性。 CreatedDate、ModifiedDate 和 ModifiedBy。

现在我只是在我的对象上下文的 SaveChanges() 方法中对我知道的那些进行硬编码。

例如:

bool newEntity = (entry.State == EntityState.Added);

if (type == typeof(Foo))
{
var r = entry.Entity as Foo;
if (r != null)
{
if (newEntity)
r.CreatedDate = DateTime.Now;
r.ModifiedDate = DateTime.Now;
r.ModifiedBy = HttpContext.Current.User.Identity.Name;
}
}

我知道可以使用与此类似的代码来检查对象是否具有特定方法:

public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}

但是我如何在不直接转换实体的情况下获得这些属性?

我该如何做:

if (HasMethod(entry.Entity))
entry.Entity.ModifiedDate = DateTime.Now;

我正在使用 ASP.Net MVC 4。

最佳答案

您可以使用以下方法。如果存在,它将设置该属性。在每次调用时使用 GetType 可能会导致一些开销,需要优化。

private bool TrySetProperty(object obj, string property, object value) {
var prop = obj.GetType().GetProperty(property, BindingFlags.Public | BindingFlags.Instance);
if(prop != null && prop.CanWrite) {
prop.SetValue(obj, value, null);
return true;
}
return false;
}

用法

TrySetProperty(entry.Entity, "ModifiedDate", DateTime.Now);

关于c# - 如何在通用实体上设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962727/

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