Entity Framework 不是主键的外键
Entity Framework foreign key that is not a primary key
我的 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)
)
我想从仅 ID 切换到 GUID 以获得唯一性并更改了表格。
我读过出于性能原因不建议将 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)
)
现在 Entity Framework 变得非常疯狂,因为 guid 不是主键的一部分而取消所有关系。
在旧帖子上我读到这将不受支持。还不支持吗?
我如何支持解决这个问题?
非常感谢!
也很抱歉格式错误,编辑不尊重我的换行符:/
速蒙
I wanted to switch from only IDs to GUIDs for uniqueness and changed the tables.
您真的不需要切换到 GUID 来确保 uniqueness.Your ID 保证是唯一的(无论它们是什么类型,比如整数),只要它们被设置为主键。
I have read that GUIDs as primary keys are not recommended for performance reasons. So I kept the IDs
tenantGuid uniqueidentifier foreign key to tenants.tenantGuid
假设您谈论的是使用 GUID 作为键时 'joins' 的性能,那么将 ID 作为主键不会有什么不同,因为无论如何都会对 GUID 进行查询。
Now entity framework is going wild just dismissing all relationships because the guids are not part of the primary key.
How am I support to solve this?
我相信你最好不要解决这个问题,而是选择返回到以前使用整数 ID 的数据库设计。或者最终使用 GUID 作为您的主键(在此过程中删除整数 ID)。
如果您仍然希望我们使用唯一标识符,您需要注意以下两点
Set the tenants.tenantGuid to UNIQUE KEY and also set the users.tenantGuid as the same data type
修改表格如下
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)
)
希望这对你有用
我的 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)
)
我想从仅 ID 切换到 GUID 以获得唯一性并更改了表格。 我读过出于性能原因不建议将 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)
)
现在 Entity Framework 变得非常疯狂,因为 guid 不是主键的一部分而取消所有关系。
在旧帖子上我读到这将不受支持。还不支持吗?
我如何支持解决这个问题?
非常感谢!
也很抱歉格式错误,编辑不尊重我的换行符:/
速蒙
I wanted to switch from only IDs to GUIDs for uniqueness and changed the tables.
您真的不需要切换到 GUID 来确保 uniqueness.Your ID 保证是唯一的(无论它们是什么类型,比如整数),只要它们被设置为主键。
I have read that GUIDs as primary keys are not recommended for performance reasons. So I kept the IDs
tenantGuid uniqueidentifier foreign key to tenants.tenantGuid
假设您谈论的是使用 GUID 作为键时 'joins' 的性能,那么将 ID 作为主键不会有什么不同,因为无论如何都会对 GUID 进行查询。
Now entity framework is going wild just dismissing all relationships because the guids are not part of the primary key.
How am I support to solve this?
我相信你最好不要解决这个问题,而是选择返回到以前使用整数 ID 的数据库设计。或者最终使用 GUID 作为您的主键(在此过程中删除整数 ID)。
如果您仍然希望我们使用唯一标识符,您需要注意以下两点
Set the tenants.tenantGuid to UNIQUE KEY and also set the users.tenantGuid as the same data type
修改表格如下
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)
)
希望这对你有用