我还更喜欢通过种子方法转换迁移文件中的数据。
更新数据应该不是问题,您可以按照下面的行代码所示进行操作,也可以在 SQL 字符串中传递来自 C# 的参数:
Sql("UPDATE TableName SET MyValueInMinutes= -DATEDIFF(MINUTE, CurrentTime, 0)";
数据读取的问题!实际上,您永远不需要在 C# 中处理数据转换,通常您在 SQL Server 中创建所有内容(存储过程和函数以及 SQL 状态),并且您可以在需要时或在需要时从迁移文件中调用它们数据已准备好进行转换。但我认为你不是数据库程序员,这就是你尝试用 C# 处理数据的原因。
这是一个如何迭代行的示例,我将搜索给定的文本并为您找到一个免费的“AnyText”+计数器。
CREATE PROCEDURE sp_FindFreeName
@toBeFindName nvarchar(MAX) OUT
AS
BEGIN
DECLARE @LoopCounter INTEGER
SET @LoopCounter = 1
WHILE EXISTS (SELECT @toBeFindName FROM dbo.MyTable WHERE Name = @toBeFindName)
BEGIN
SET @toBeFindName = 'AnyText', @LoopCounter)
SET @LoopCounter = @LoopCounter + 1
END
END
然后就可以调用C#表单了:
var cSharpName = string.Empty;
Sql("exec sp_FindFreeName @toBeFindName=@"+ cSharpName +" OUTPUT");
其中 cSharpName 由 C# 给出。
第三个原因是您还可以编写自己的 Code First 迁移操作。您必须按照 Rowan 博客中所述定义 SqlServerMigrationSqlGenerator:
https://romiller.com/2013/02/27/ef6-writing-your-own-code-first-migration-operations/ https://romiller.com/2013/02/27/ef6-writing-your-own-code-first-migration-operations/
结论:
如果您确实想读取迁移文件中的数据,那么您必须使用例如:SqlDataReader,并且还必须从 App.config 读取连接字符串。
在大多数用例中,您可以在 SQL Server 中执行所有操作。只需创建数据转换 SQL 脚本并从所需位置执行它们即可。
您可以使用扩展和 SqlServerMigrationSqlGenerator 以比 DataReader 更干净的方式执行此操作。