gpt4 book ai didi

c# - 使用 EntityFramework 将我的实体变量转换为特定(实体)类型

转载 作者:行者123 更新时间:2023-12-02 15:55:21 24 4
gpt4 key购买 nike

我有一些像下面这样的类(class):

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 个字段。

每次创建/更新实体时,我都会调用一个函数来更新所有类中存在的 4 个字段(CreatedTime、CreatedById、UpdatedTime、UpdatedById)。

下面的示例适用于 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;
}

如您所见,我声明了一个 entity 变量,该变量使用前缀 (Driver) 进行转换。

现在我想调整此代码以便能够引用任何类,而不是特定的 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; }
}

然后让您的实体实现该接口(interface)。任何实现该接口(interface)的实体都可以使用...

var userId = Current.User.Identity.Name.ToUpper();   
var entity = entityInfo.Entity as Auditable;
if (entity != null) { /* set the audit values */ }

如果实体未实现该接口(interface),那么您实际上不会设置审核值。

关于c# - 使用 EntityFramework 将我的实体变量转换为特定(实体)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143663/

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