[英]Casting my entity variable to a specific (entity) type with EntityFramework
我下面有一些这样的课程:
public class Driver
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string CreatedById { get; set; }
public DateTime? CreatedTime { get; set; }
public string UpdatedById { get; set; }
public DateTime? UpdatedTime { get; set; }
}
请注意最后4个字段。
每次创建/更新实体时,我都会调用一个函数来更新我所有类(CreatedTime,CreatedById,UpdatedTime,UpdatedById)中存在的4个字段。
下面的示例适用于Driver
类:
private void UpdateAdditionalData(EntityInfo entityInfo)
{
var userId = Current.User.Identity.Name;
var entity = (Driver)entityInfo.Entity;
...
if (entityInfo.EntityState == EntityState.Added)
{
entity.CreatedTime = DateTime.Now;
entity.CreatedById = userId;
}
if (entityInfo.EntityState == EntityState.Modified)
{
entity.UpdatedTime = DateTime.Now;
entity.UpdatedById = userId;
}
如您所见,我声明了一个以前缀(Driver)
强制转换的entity
变量。
现在,我想调整此代码,使其能够引用任何类,而不是专门引用Driver类。
我尝试了类似的东西:
private void UpdateAdditionalData(EntityInfo entityInfo)
{
var userId = Current.User.Identity.Name.ToUpper();
var typed = entityInfo.Entity.GetType().Name;
var entity = (typed)entityInfo.Entity;
...
因此,我声明了一个typed
变量,它是用于转换实体的实体名称。
但这不起作用,我得到一个错误:找不到“类型化”名称空间的类型。
知道我该怎么做吗?
谢谢。
通常,此类型无效的底线是静态的编译时数据。 您正在尝试在运行时获取它。 这意味着将使用复杂的反射和调用。
我认为您想要的是一个可在实体之间共享的接口。
public interface Auditable
{
string CreatedById { get; set; }
DateTime? CreatedTime { get; set; }
string UpdatedById { get; set; }
DateTime? UpdatedTime { get; set; }
}
然后让您的实体实现该接口。 可以使用实现该接口的任何实体...
var userId = Current.User.Identity.Name.ToUpper();
var entity = entityInfo.Entity as Auditable;
if (entity != null) { /* set the audit values */ }
如果该实体未实现该接口,则您实际上将不会设置审核值。
除非我对您有误解,否则您是否需要实体的基本类型?
public class Driver : EntityBase
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
基本类型...
public class EntityBase
{
public string CreatedById { get; set; }
public DateTime? CreatedTime { get; set; }
public string UpdatedById { get; set; }
public DateTime? UpdatedTime { get; set; }
}
那么您可以简单地将其强制转换为基本类型?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.