c# - 复合 EF Core Key 中 Null 值的解决方法
问题描述
我正在尝试使用 EF Core 访问我无法修改的现有数据库。该数据库有两个用于日志记录的主表:log
和logentry
.
//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
会使更改项保持唯一。
有没有办法解决这个问题?
解决方案
推荐阅读
- python - 可以使用数字/整数以外的源字符访问其元素索引的数据类型是什么?
- gatsby - 查询 gatsby graphql 构建服务器
- azure - Get-DLPComplianceRule 返回 System.Collections.Hashtable
- php - 在php中修改数组
- entity-framework - 使用 EF Core 存储 3D 空间数据
- kubernetes - 运行需要大 tmp 磁盘空间的作业的更好方法是什么?
- laravel - Laravel Redis / 如何只刷新特定的 redis 数据库?
- java - 如何将多部分文件发送到弹簧批处理
- angular - 如何创建安装了 Angular CLI 10 的 Angular 8 应用程序
- reactjs - 我正在尝试将数组传递给函数并继续使用它,但我总是得到错误数量的元素