MSSQL和Entity框架在多个表上同步PK

时间:2013-01-29 11:47:39

标签: sql-server entity-framework

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

我在数据库中有两个表:

用户

  • pkID(int)
  • FirstName(varchar)
  • LastName(varchar)
  • 电子邮件(varchar)
  • ...

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

  • PKID
  • fkUserID
  • bFirstName(bool)
  • bLastName(bool)
  • bEmail(bool)

我很好奇为什么人们删除表上的标识插件是个坏主意...如果我依靠MSSQL分配PK然后我可以在插入记录时看到一个实例进入数据库,第二个表写入在处理多个写入时可以获得不同的值...

1 个答案:

答案 0 :(得分: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