微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在实体框架迁移期间读取数据库(选择查询)

我知道我可以使用sql方法在迁移期间更新数据,它对于可以在纯sql中表达的简单事物非常有用.

我也知道我可以使用种子方法,但这会感觉像是一个黑客(我想写的代码必须执行一次,执行迁移时).

在我目前的情况下,我需要从列中删除HTML标记,并将其写入迁移中添加的新列.我已经有一个C#方法就是这么做的.我想要做的是迭代C#中的每一行,并为每一行生成一个sql语句,该语句将使用相应的HTML去除文本更新行.

更一般地说,我认为在迁移过程中能够在C#中读取数据库在很多情况下都很方便.在迁移事务中这样做是完美的,但为此我需要检索Entity Framework内部用于迁移的sql连接.

到目前为止,我发现无法执行返回结果的SQL查询.这可能吗?

解决方法

我也更喜欢通过Seed方法转换迁移文件中的数据.

更新数据不应该是一个问题,您可以按照下面的行代码所示进行操作,也可以在sql字符串中传递C#中的参数:

sql("UPDATE TableName SET MyValueInMinutes= -DATEDIFF(MINUTE,CurrentTime,0)";

数据读取的问题!实际上,您永远不需要在C#中处理数据转换,通常您在sql Server(存储过程和函数以及sql stametents)中创建所有内容,您可以在需要时或在何时从迁移文件调用它们.数据准备好进行转型.但我认为您不是数据库程序员,这就是为什么您要尝试处理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 Migration Operations.你必须按照Rowan博客中的描述定义你的sqlServerMigrationsqlGenerator:

https://romiller.com/2013/02/27/ef6-writing-your-own-code-first-migration-operations/

结论:

如果您确实想要读取迁移文件中的数据,那么您必须使用例如:sqlDataReader,您还必须从App.config中读取连接字符串.

在大多数用例中,您可以在sql Server中执行所有操作.只需创建数据转换sql脚本并从所需位置执行它们.

您可以使用Extensions和sqlServerMigrationsqlGenerator以更简洁的方式执行此操作,然后使用DataReader.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐