我的数据库中有 2 个表,我正在尝试为其创建 Linq2Sql 实体。他们还有更多的东西,但这基本上是他们归结为:

房间用户事件
—————————
房间 ID 事件 ID
RoomID(Rooms.RoomID 上的外键)
UserActivity 表本质上只是用户对 Rooms 表执行的操作的日志。

由于 UserActivity 表仅用于记录所采取的操作,因此最初为该表创建主键并没有多大意义(至少对我而言),直到 Linq2Sql 映射器拒绝将 UserActivity 作为 Room 的一部分我的 Linq 实体中的实体。当我在 Visual Studio 设计器中设置实体时,我收到了以下 2 个警告:



这些警告促使我在我的表中创建 ActivityID 列,如上所示。

我想知道的是,是否有任何方法可以让 Linq2Sql 在两个表中都没有主键的情况下在我的实体之间创建关系。如果我在 UserActivity 表中没有主键,仍然可以创建实体,但不会生成关系。

是否可以这样做,或者我应该尝试确保我的表中始终有一个主键作为一般的良好做法?

最佳答案

在您的应用程序中存储真实数据的任何表都应该始终有一个主键 - 大多数情况下,在 SQL Server 环境中,一个 INT IDENTITY(1,1) 就可以了。您不必跟踪这些,无需记账等。它不会花费您太多,完全容易做到 - 我看不出有任何理由为什么没有主键,即使在您的 UserActivity 表上也是如此。

ALTER TABLE UserActivity
  ADD UserActivityID INT IDENTITY(1,1)
  CONSTRAINT PK_UserActivity PRIMARY KEY

你就完成了!

我会说不需要主键的唯一时间是在批量导入大量数据或其他临时场景时使用临时表之类的东西。

马克

关于Linq2Sql : Can I create entities with foreign key relationships without a primary key in both tables?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/991529/

10-15 11:04