没有PK和表复制的实体框架表(对等)

时间:2017-08-08 21:31:15

标签: sql-server entity-framework

我想为审计添加某种日志,无论何时用户更改某些值,我都会在此表中添加一个条目。现在我有一个指向原始表的ID,加上用户名,日期,操作,旧值和新值。

最初我以为我不需要PK,因为它大部分都是只写表。查询这个表基本上是用于调试,并且不介意没有索引,因此没有PK。

除此之外,我的数据库将通过对等复制进行复制。

所以我正在使用实体框架,它抱怨该表没有PK,所以它不允许我对它进行写操作。我想为PK添加一个标识(1,1),但是复制会开始出现问题。我对下一步做什么感到有些失落,所以我来到这里寻求建议:

  1. 如果某个表没有PK并让它进行写操作,是否有办法忽略Entity Framework?

  2. 我应该使用Guids而不是PK的整数吗?

2 个答案:

答案 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删除或更新。