gpt4 book ai didi

entity-framework - EF代码优先的自定义初始化策略,该策略不会删除表以添加列

转载 作者:行者123 更新时间:2023-12-04 18:14:59 25 4
gpt4 key购买 nike

最新的EF Code First NuGet软件包随附了名为IDatabaseInitializerDontDropDbJustCreateTablesIfModelChanged的自定义实现。顾名思义,当检测到模型更改时,它不会删除并重新创建整个数据库,而只是删除并重新创建表。

说我有这个模型课:

public class User
{
public string Username { get; set; }

// This property is new; the model has changed!
public string OpenID { get; set; }
}

如何实现 不会删除任何表的IDatabaseInitializer。在这种情况下,是否会在User表中添加OpenID列?

最佳答案

我认为这是SQL的问题。因此,对于SQL Server,您可以编写类似以下内容的内容:

public class MyInitializer : IDatabaseInitializer<MyContext>
{
public void InitializeDatabase(MyContext context)
{
context.Database.SqlCommand(
@"
IF NOT EXISTS (SELECT 1 FROM sys.columns AS col
INNER JOIN sys.tables AS tab ON tab.object_Id = col.object_Id
WHERE tab.Name = 'User' AND col.Name = 'OpenId')
BEGIN
ALTER TABLE dbo.User ADD OpenId INT;
END");
}
}

但是,以同样的方式,您可以执行此类脚本而无需将其添加到应用程序中,我认为这是更好的方法。

关于entity-framework - EF代码优先的自定义初始化策略,该策略不会删除表以添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312017/

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