我想为审计添加某种日志,无论何时用户更改某些值,我都会在此表中添加一个条目。现在我有一个指向原始表的ID,加上用户名,日期,操作,旧值和新值。
最初我以为我不需要PK,因为它大部分都是只写表。查询这个表基本上是用于调试,并且不介意没有索引,因此没有PK。
除此之外,我的数据库将通过对等复制进行复制。
所以我正在使用实体框架,它抱怨该表没有PK,所以它不允许我对它进行写操作。我想为PK添加一个标识(1,1),但是复制会开始出现问题。我对下一步做什么感到有些失落,所以我来到这里寻求建议:
如果某个表没有PK并让它进行写操作,是否有办法忽略Entity Framework?
我应该使用Guids而不是PK的整数吗?
答案 0 :(得分:0)
首先,我很困惑,因为SQL Server事务复制需要主键。
但假设此表没有PK,您可以: 1)将时间戳定义为PK,或 2)将GUID定义为PK
在这两种情况下,你都会有PK,但当然不会小于int。
请看一下这篇文章:https://www.codeproject.com/Articles/24340/Breaking-the-Law-Primary-Keys-in-SQL-Server
它包含有关数据库设计的良好讨论。
答案 1 :(得分:0)
EF并不需要真正的PK。您只需要向EF声明一些唯一标识行的列组合。
你甚至可以向不是PK的EF声明PK,但是你必须禁止乐观并发检查,永远不要通过EF删除或更新。