1

我一直在使用 C# 中的实体框架,试图弄清楚如何将两个表连接在一起。我在这里找到了有关如何执行此操作的参考http://msdn.microsoft.com/en-us/data/jj715646.aspx 。问题是,这两个表的 PK 不同步,这似乎是一个要求。我以前从来不用担心从数据库中的两个表同步 PK。我知道我可以在一张桌子上关闭身份插入,但我看到很多人评论说这是一个非常糟糕的主意。如果我不应该这样做,那么如何完成每个表中的 PK 同步?

我在数据库中有两个表:

用户

  • pkID(整数)
  • 名字(varchar)
  • 姓氏 (varchar)
  • 电子邮件(varchar)
  • ...

LockedFlags(锁定用户中的字段不被编辑)

  • PKID
  • fk用户ID
  • bFirstName (bool)
  • bLastName (bool)
  • bEmail (bool)

我很好奇为什么人们认为删除表上的身份插入是一个坏主意......如果我依靠 MSSQL 分配一个 PK,那么当我将记录插入数据库时​​我可以看到一个实例在处理多个写入时,第二个表写入可能会得到不同的值......

4

1 回答 1

1

听起来您在 LockedFlags 表中有孤立的行,例如具有指向已删除用户的用户 ID 的行。根据关系的设置方式,反过来也可能成立。

如果您有一个实体,其中 2 个表合并为一个类,则加载实体集将查询两个表并需要匹配的行对。

您的 LockedFlags 可能有一个用户属性,它正在尝试加载并且在用户表中找不到。

表选项:注意:我使用的是等效的 MSSQL,因为我不知道 MYSQL。

关于您的数据模型的评论:我不知道 MYWSQL 如何处理记录锁定,但如果它类似于 MSSQL,您不必担心手动处理。

如果您要按原样使用它,我强烈建议您重新查看您的数据模型。如果您真的想手动锁定单个行字段,最好只使用单个表?

编辑:

ALTER TABLE LockFlags ADD CONSTRAINT
    FK_LockFlags_User FOREIGN KEY
    (
    UserID
    ) REFERENCES User
    (
    pkID
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO
于 2013-01-29T12:25:35.893 回答