实体框架外键不是主要键



我的MSSQL数据库设计有问题。

我有2个桌子,看起来像这样:

CREATE TABLE tenants 
(
    tenantId INT PRIMARY KEY,
    tenantName VARCHAR
)
CREATE TABLE users 
(
    userId INT PRIMARY KEY,
    userName VARCHAR,
    tenantId INT,
    FOREIGN KEY (tenantId) REFERENCES tentants(tenantId)
)

我想从IDS中仅切换到GUIDS,以获取独特性并更改表。我已经读到,出于性能原因,不建议将GUID作为主要键。所以我保留了ID:

CREATE TABLE tenants 
(
    tenantId INT PRIMARY KEY,
    tenantGuid UNIQUEIDENTIFIER,
    tenantName VARCHAR
)
CREATE TABLE users 
(
    userId INT PRIMARY KEY,
    userGuid UNIQUEIDENTIFIER,
    userName VARCHAR,
    tenantGuid UNIQUEIDENTIFIER,
    FOREIGN KEY (tenantGuid) REFERENCES tentants(tenantGuid)
)

现在,实体框架正在疯狂地驳回所有关系,因为GUID不是主要关键的一部分。

在旧帖子上,我已经读到这将不支持。它仍然不支持吗?

我如何支持解决这个问题?

非常感谢!

也很抱歉格式不佳,编辑器不尊重我的台阶:/

soomon

我想从ID仅切换到GUIDS以获得唯一性并更改表。

您实际上不需要切换到GUIDS来确保唯一性。只要将它们设置为主要键,您的ID就可以保证是唯一的(例如它们是哪种类型)。

我已经读到,出于性能原因,不建议将GUID作为主要键。所以我保留了ID

tenantGuid uniqueidentifier foreign key to tenants.tenantGuid

假设您在使用GUID作为密钥时谈论的是"加入"的性能,那么将ID作为主要密钥将不会有所作为,因为无论如何都会在GUID上进行查询。

现在,实体框架正在疯狂地驳回所有关系,因为GUID不是主要关键的一部分。

我如何支持解决这个问题?

我相信您最好不要解决这个问题,而是选择返回使用整数ID的以前的数据库设计。或最终将GUID用作主要密钥(在此过程中删除整数ID)。

如果您仍然想给我们唯一的标识符,则需要注意以下两个件事

将租户设置为唯一键,还将用户设置为tenantguid作为相同的数据类型

修改表如下

CREATE TABLE tenants (
    tenantId INT PRIMARY KEY,
    tenantGuid UNIQUEIDENTIFIER UNIQUE,
    tenantName VARCHAR
)
CREATE TABLE users (
    userId INT PRIMARY KEY,
    userGuid UNIQUEIDENTIFIER,
    userName VARCHAR,
    tenantGuid UNIQUEIDENTIFIER,
    FOREIGN KEY (tenantGuid) REFERENCES tenants(tenantGuid)
)

希望这对您有用

相关内容

  • 没有找到相关文章

最新更新