小编m.p*_*bos的帖子

实体框架核心代码优先:级联删除多对多关系

我正在使用"EntityFramework.Core": "7.0.0-rc1-final"由SQL Server 2012 Express DB支持的Entity-Framework Core(版本)的ASP.NET MVC 6项目.

我需要模拟Person实体和Address实体之间的多对多关系.根据指南,我使用PersonAddress连接表实体对其进行建模,因为这样我可以存储一些额外的信息.

我的目标是以这种方式设置我的系统:

  • 如果Person删除PersonAddress实例,则必须删除所有相关实例.Address它们引用的所有实例也必须删除,只要它们与其他PersonAddress实例无关.
  • 如果PersonAddress删除Address实例,则只有与其他PersonAddress实例无关时,才必须删除与其关联的实例.所有Person实例都必须存在.
  • 如果Address删除PersonAddress实例,则必须删除所有相关实例.所有Person实例都必须存在.

我认为大多数工作必须在Person和之间的多对多关系中完成Address,但我希望也写一些逻辑.我将把这一部分从这个问题中解脱出来.我感兴趣的是如何配置我的多对多关系.

这是目前的情况.

这是Person实体.请注意,此实体与其他辅助实体之间存在一对多关系.

public class Person
{
    public int Id {get; set; } //PK
    public virtual ICollection<Telephone> Telephones { get; set; } //navigation property …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework code-first ef-code-first entity-framework-core

10
推荐指数
1
解决办法
5065
查看次数

Audit.NET Entity Framework Core - 相关实体管理

我正在开发 ASP.NET Core 3.1 Web 应用程序。我想在数据库上保存数据时添加审计跟踪/日志。

我从这个 SO answer 中获得灵感,开始在测试项目中使用 Audit.NET。
这是我的目标(类似于相关的 SO 线程):

  1. 将审计记录存储在不同的数据库中:几乎使用额外的AppAuditDbContext;
  2. 每个类型都有一个与审计类型匹配的审计表(带有额外的审计字段):通过对额外的反射完成AppAuditDbContext
  3. 不需要维护单独的审计实体。操作数据库和审计数据库之间的变化应该是无缝的:通过对额外实体和被审计实体的反思来完成AppAuditDbContextDataAnnotations
  4. 检索相关实体的审计数据:TO DO

此时,我可以 CRUD 一个独立的审计实体,并在审计数据库上检索正确的审计。
但是,尽管我可以成功删除父实体及其子实体并获取父实体和子实体的审计数据,但我无法弄清楚如何从数据库中获取分组审计数据以用于此类场景。
我尝试使用 Audit.NET EntityFramework 的EntityFrameworkEvent.TransactionIdEntityFrameworkEvent.AmbientTransactionId,但它们都null在数据库上。

这是我的 POCO

public interface IAuditableEntity
{
    [NotMapped]
    string AuditAction { get; set; }

    [NotMapped]
    string AuditTransactionId { get; set; }

    [NotMapped]
    string AuditAmbientTransactionId { get; set; }
}

public class Scope : IAuditableEntity …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-core audit.net

5
推荐指数
1
解决办法
812
查看次数