定义一种通用变量,用于引用两个不同的实体

本文关键字:两个 引用 实体 一种 定义 变量 用于 | 更新日期: 2023-09-27 18:08:10

我有一些具有相同属性的模型类(RevisedDate &RevisedBy):

public class Request
{
    public int RequestId { get; set; }
    ...
    public DateTime RevisedDate { get; set; } <---
    public User RevisedBy { get; set; }       <---
}
public class Material
{
    public int MaterialId { get; set; }
    ...
    public DateTime RevisedDate { get; set; } <---
    public User RevisedBy { get; set; }       <---
}

现在我有以下代码:

if (entry.Entity is Request)
{
    Request request = (Request)entry.Entity;
    ctx.LoadProperty(request.RevisedBy, x => x.Roles);
    if (request.RevisedBy.Roles.Find(x => x.RoleName == "ADMIN") == null) return;
}
if (entry.Entity is Material)
{
    Material material = (Material)entry.Entity;
    ctx.LoadProperty(material.RevisedBy, x => x.Roles);
    if (material.RevisedBy.Roles.Find(x => x.RoleName == "ADMIN") == null) return;
}

我的问题:是否有可能组装这两个代码并做一些像这样的通用代码:

if (entry.Entity is Request|| entry.Entity is Material)
{
    var myEntity = entry.Entity;
    ctx.LoadProperty(myEntity.RevisedBy, x => x.Roles);
    if (myEntity.RevisedBy.Roles.Find(x => x.RoleName == "ADMIN") == null) return;
}

定义一种通用变量,用于引用两个不同的实体

添加一个定义"Revisable"合约的接口。然后让类实现这个接口

public interface IRevisable
{
   DateTime RevisedDate { get; set; }
   User RevisedBy { get; set; }    
}

public class Request: IRevisable
{
}
public class Material: IRevisable
{
}

if (entry.Entity is IRevisable)
{
     var myEntity = entry.Entity as IRevisable;
     ctx.LoadProperty(myEntity.RevisedBy, x => x.Roles);
     if (myEntity.RevisedBy.Roles.Find(x => x.RoleName == "ADMIN") == null)    return;
}

你绝对可以从某种BaseEntity类继承你的类:

public class BaseEntity 
{
    ...
    public DateTime RevisedDate { get; set; } <---
    public User RevisedBy { get; set; }       <---
}

public class Request: BaseEntity 
{
    ...
}
public class Material: BaseEntity 
{
    ...
}

然后你可以这样写:

if (entry.Entity is BaseEntity)
{
   ... // your stuff
}