首页 > 解决方案 > 复合 EF Core Key 中 Null 值的解决方法

问题描述

我正在尝试使用 EF Core 访问我无法修改的现有数据库。该数据库有两个用于日志记录的主表:loglogentry.

//Log 
LogPK  UserFK  LogDescriptionFK  LogTableFK  PrimaryKey  Stamp

//LogEntry
LogFK  LogTableFK  LogEventFK  LogColumnFK  PrimaryKey  Parm1  Parm2

这两个表都没有定义实际的主键。

当用户更新系统中的记录(即人员)时,会创建一条日志记录,并为作为更改一部分的每个字段创建一个日志条目(即,名字从“Ted”更改为“Tedd”,姓氏已更改从“哈里斯”到“哈里森”等)。

所有LogEntry记录都与单个Log记录相关联。日志条目也由 FK 绑定到表名、事件类型和列名的列表。(我认为这个想法可能是根据这些表中存在的表和列来限制正在记录的更改)。

系统的原始创建者还使用这些表来记录登录系统的用户。在这种情况下,他将使用单个日志条目创建单个日志记录。但是,在这种情况下,没有“列”被更改,因此LogColumnFK为空。

最初,我已经像这样配置了我的 DBContext:

builder.Entity<LogEntry>().ToTable("logentry")
  .HasKey(l => new {l.LogFK, l.LogTableFK, l.LogEventFK, l.LogColumnFK });

这对于记录更改非常有用,但是当我尝试登录用户登录时,我收到一个错误,因为LogColumnFK它是空的。从密钥定义中删除l.LogColumnFK应该可以解决登录用户登录的问题,但在尝试记录更改时会产生错误,因为这LogColumnFK会使更改项保持唯一。

有没有办法解决这个问题?

标签: c#entity-framework

解决方案


推荐阅读