Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查EntityEntry是否派生自BaseEntity<;TKey>;在C中#_C# - Fatal编程技术网

C# 如何检查EntityEntry是否派生自BaseEntity<;TKey>;在C中#

C# 如何检查EntityEntry是否派生自BaseEntity<;TKey>;在C中#,c#,C#,我有一个BaseEntity,具有所有实体的通用审计属性 基本实体: 公共类基本实体 { 公钥Id{get;protected set;} public bool Active{get;protected set;} public DateTimeOffset CreatedAt{get;protected set;} 由{get;protected set;}创建的公共字符串 public DateTimeOffset?ModifiedAt{get;protected set;} 公共字符串由

我有一个
BaseEntity
,具有所有实体的通用审计属性

基本实体

公共类基本实体
{
公钥Id{get;protected set;}
public bool Active{get;protected set;}
public DateTimeOffset CreatedAt{get;protected set;}
由{get;protected set;}创建的公共字符串
public DateTimeOffset?ModifiedAt{get;protected set;}
公共字符串由{get;protected set;}修改
}
例如,具有不同键的派生实体

衍生实体:

公共类书:BaseEntity
{
公共字符串名称{get;set;}
}
公共类作者:BaseEntity
{
公共字符串名称{get;set;}
}
公共类图书作者
{
公共int AuthorId{get;set;}
公共作者{get;set;}
公共Guid BookId{get;set;}
公共图书{get;set;}
}
我正在尝试在我的EF Core
saveChangesSync()
中添加创建/更新的用户和时间戳详细信息。但我没办法做到这一点

重写了
saveChangesSync()

public override Task savechangesync(bool acceptAllChangesOnSuccess,CancellationToken CancellationToken=default)
{
ChangeTracker.DetectChanges();
var timestamp=DateTimeOffset.Now;
var user=“用户名”;
var entityEntries=ChangeTracker
.条目()
其中(e=>e.Entity是BaseEntity
&&(e.State.Equals(EntityState.Added)| | e.State.Equals(EntityState.Modified))
&&!e.Metadata.IsOwned());
foreach(entityEntries中的var条目)
{
entry.Property(“ModifiedAt”).CurrentValue=时间戳;
entry.Property(“ModifiedBy”).CurrentValue=用户;
if(entry.State.Equals(EntityState.Added))
{
entry.Property(“CreatedAt”).CurrentValue=时间戳;
entry.Property(“CreatedBy”).CurrentValue=user;
entry.Property(“Active”).CurrentValue=true;
}
}
return base.saveChangesSync(acceptAllChangesOnSuccess,cancellationToken);
}

如何在我的
LINQ
查询中检查
e.Entity是否为BaseEntity
?如果我移除条件并运行;然后,
BookAuthor
将抛出异常,因为它们没有审核属性。请协助

需要澄清的是,基类并不像您描述的那样“常见”

如果您有两个派生类

public class Book : BaseEntity<int>
public class Author : BaseEntity<Guid> 

您愿意使用反射吗?但是它会很昂贵吗?比使用
is
操作符进行简单的类型检查更昂贵。使用反射时,以下情况成立:
typeof(BaseEntity)==typeof(Book)。BaseType.GetGenericTypeDefinition()
。感谢您的详细解释和指导。赢得尊重。
public class BaseEntity
{
    public bool Active { get; protected set; }

    public DateTimeOffset CreatedAt { get; protected set; }

    public string CreatedBy { get; protected set; }

    public DateTimeOffset? ModifiedAt { get; protected set; }

    public string ModifiedBy { get; protected set; }
}

public class BaseEntity<TKey> : BaseEntity
{
    public TKey Id { get; protected set; }
}
var entityEntries = ChangeTracker
                    .Entries()
                    .Where(e => e.Entity is BaseEntity
                                && (e.State.Equals(EntityState.Added) || 
e.State.Equals(EntityState.Modified))
                                && !e.Metadata.IsOwned());