3

Entity Frameworkを使用してオブジェクトをデータベースに挿入しようとしていますが、2つのプロパティがSQL Serverのsoundex関数の結果を表していますが、正しい方向を示すものが見つかりません。

私のコードの非常に単純化された例:

C#オブジェクト

public class Person{
    string FirstName
    string LastName
    string FirstNameSE
    string LastNameSE
}

テーブル構造:

FirstName   varchar(50)
LastName    varchar(50)
FirstNameSE varchar(4)
LastNameSE  varchar(4)

挿入方法

public static void InsertIntoDatabase(Person vPerson){
    using (var db = new DatabaseContext()) {
        db.People.Add(vPerson);
        db.SaveChanges();
    }
}

これは機能しますが、FirstNameSEとLastNameSEをそれぞれsoundex(FirstName)とsoundex(LastName)に設定する必要があり、挿入でそれを行う方法がわかりません。

LINQ to Entities selectステートメントでSqlFunctionsクラスを使用する方法を見つけましたが、データを挿入しようとしているときは役に立ちません。

4

1 に答える 1

3

私はあなたが数回の往復をするのに行き詰まっているかもしれないと思います。このようなもので十分かもしれません(簡潔にするためにエラー処理は省略されています):

public static void InsertIntoDatabase(Person vPerson){
    using (var db = new DatabaseContext()) {
        var soundExQuery = db.People.Select(p => 
              new { 
                      FirstNameSE = SqlFunctions.SoundCode(vPersion.FirstName), 
                      LastNameSE = SqlFunctions.SoundCode(vPersion.LastName) 
            }
        ).Take(1);

        var result = soundExQuery.ToArray();

        vPerson.FirstNameSE = result[0].FirstNameSE;
        vPersion.LastNameSE = result[0].LastNameSE;
        db.People.Add(vPerson);
        db.SaveChanges();
    }
}

サウンドコードを取得するために1回往復してから、それらを挿入します。

はい、それほどクリーンではありませんが、他の唯一のオプションはストレートSQLにドロップすることだと思います。

db.ExecuteStoreCommand(
    @"INSERT INTO People (FirstName, LastName, FirstNameSE, LastNameSE) 
    VALUES ({0}, {1}, SOUNDEX({0}), SOUNDEX({1}))"
    , vPerson.FirstName, vPerson.LastName);

ExecuteStoreCommandSQLパラメータ化が自動的に行われることに注意してください。(ではありませんstring.Format)。

http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executestorecommand.aspx

于 2012-11-28T15:21:59.417 に答える