2016-07-27 6 views
2

Sqlメソッドを使用して移行中にデータを更新できます。純粋なSQLで表現できる簡単な処理には最適です。エンティティ・フレームワークの移行中にデータベースを読み取る(問合せの選択)

Seedメソッドを使用することもできますが、それはハッキングのように感じるでしょう(マイグレーションが実行されると、一度コードを実行する必要があります)。

私の現在のケースでは、列からHTMLタグを取り除き、移行で追加された新しい列に書き込む必要があります。私はすでにC#のメソッドを持っています。私がしたいことは、C#の各行に対して繰り返し実行され、行を対応するHTMLで取り除かれたテキストで更新するSQL文を各行に生成します。

もっと一般的には、マイグレーション中にC#でデータベースを読み込めると、多くの状況で便利になると思います。移行トランザクション内でこれを行うのは完璧ですが、そのためにEntity Frameworkが内部的に使用するSQL接続を取得する必要があります。

これまでのところ、結果を返すSQLクエリを実行する方法が見つかりませんでした。これは可能ですか?

答えて

1

また、移行ファイルのデータをSeedメソッドで変換することもお勧めします。

データを更新すると、問題になることはありません、あなただけの下の行のコードに示しますすることができますよう、あなたはまた、SQL文字列でのC#からパラメータを渡すことができます。

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

問題をデータで読む!実際には、C#でデータの変換を処理する必要はありません。通常、SQLサーバー(ストアドプロシージャと関数と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#と呼ばれ​​ることができます。cSharpNameのC#から与えられた

var cSharpName = string.Empty; 
Sql("exec sp_FindFreeName @[email protected]"+ cSharpName +" OUTPUT"); 

3番目の理由は、独自のコード一次移行操作を作成することもできます。あなたはローワンのブログで説明したように、あなたのSqlServerMigrationSqlGeneratorを定義する必要があります。

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

結論:

あなたが本当に移行ファイル内のデータを読みたいなら、あなたは、たとえば使用する必要があります:SqlDataReaderとApp.configから接続文字列も読み取る必要があります。

ほとんどの場合、SQL Server内のすべてを実行できます。データ転送SQLスクリプトを作成し、目的の場所から実行するだけです。

拡張機能とSqlServerMigrationSqlGeneratorを使用すると、より洗練された方法でDataReaderを使用できます。

+0

お返事ありがとうございます。あなたが推測したように、私はSQLにはあまり慣れていません(そして私の同僚でもありません)。そして、私はウェブサイト全体をSQLで書くことができますが、C#をもっと便利に選択しました単純なデータベースクエリー(HTMLの解析、不正なHTMLの解析など)以外の言語でも使用できます。マイグレーション '操作 'を見ていきますが、一見すると、データベース接続も提供していません(SQL文字列を盲目的にエクスポートすることはできますか?)。可能であれば、データベースへの明確な接続/トランザクションを作成しないようにしたいと思います。 – youen

+0

@youen次に、移行のためのシードメソッドを使用します。シード・メソッドは、各マイグレーション・レベルで1回のマイグレーション中にX時間と呼ばれます。もしあなたが現在どのレベルで作業しているのかを知るには、通常のようにC#で簡単に使うだけで、データの追加や削除、更新ができます。 –

+0

@youen 1つのことは、Seedメソッドの2つのタイプがあります(InitとMigrationの2種類あります)。マイグレーションシードを使用し、このplzを読んでくださいhttps://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/ –

関連する問題