gpt4 book ai didi

ef-code-first - EF Code First - 设置或影响外键引用名称

转载 作者:行者123 更新时间:2023-12-04 05:33:10 26 4
gpt4 key购买 nike

我已经阅读了很多关于如何在关系中指定外键名称的帖子,没有遇到任何问题。不过,我想知道的是,有没有办法更改主键和关系的命名方式?

例如,您有一个以 UserId 作为主键的 User 表。 EF 代码第一数据库生成将主键称为 PK_User_1788CC4C07020F21(或类似名称)。或者您有从 User 表到 UserVersion 表的引用,EF 将其称为 UserVersion_User。我希望将主键命名为 PK_User,将外部引用命名为 FK_UserVersion_User

有没有办法做到这一点?一些约定覆盖或实际上能够指定文本?

谢谢。

更新:根据下面的答案和链接,我在我的种子方法中做了以下操作。这有点蛮力,但我认为它可以改进,特别是如果您使用生成器创建流畅的实体类型配置文件等。对于外键引用名称也可以这样做。

    protected override void Seed(TodoDataContext context)
{
FixIndexes(context, "User");
FixIndexes(context, "UserStats");
FixIndexes(context, "UserRole");
FixIndexes(context, "UserVersion");
FixIndexes(context, "UserUserRoleVersion");
}

private void FixIndexes(TodoDataContext context, string tableName)
{
const string renamePrimaryKeySql = @"
DECLARE @TableName NVARCHAR(128)
DECLARE @IndexName NVARCHAR(128)
DECLARE @OldName NVARCHAR(128)
DECLARE @NewName NVARCHAR(128)
SELECT @TableName = '{0}'

SELECT @IndexName = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ,INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
WHERE pk.TABLE_NAME = @TableName
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
AND C.TABLE_NAME = PK.TABLE_NAME
AND C.CONSTRAINT_NAME = PK.CONSTRAINT_NAME

SELECT @OldName = @TableName + '.' + @IndexName
SELECT @NewName = 'PK_' + @TableName

exec sp_rename @OldName, @NewName, 'INDEX'";

context.Database.ExecuteSqlCommand(string.Format(renamePrimaryKeySql, tableName));

最佳答案

不,除非您手动将它们放入 custom initializer 中,否则无法更改这些名称并再次创建它们。 EF 没有可插入约定,因此您无法覆盖它们。

关于ef-code-first - EF Code First - 设置或影响外键引用名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5993579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com