Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在实体框架插入上使用SqlFunctions.SoundCode?_C#_Entity Framework - Fatal编程技术网

C# 如何在实体框架插入上使用SqlFunctions.SoundCode?

C# 如何在实体框架插入上使用SqlFunctions.SoundCode?,c#,entity-framework,C#,Entity Framework,我试图使用Entity Framework将一个对象插入数据库,其中两个属性表示SQL Server soundex函数的结果,但我找不到任何指向正确方向的内容 我的代码的一个大大简化的示例: C#对象 表结构: FirstName varchar(50) LastName varchar(50) FirstNameSE varchar(4) LastNameSE varchar(4) 插入法 public static void InsertIntoDatabase(Person

我试图使用Entity Framework将一个对象插入数据库,其中两个属性表示SQL Server soundex函数的结果,但我找不到任何指向正确方向的内容

我的代码的一个大大简化的示例:

C#对象

表结构:

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),我不知道如何在insert上实现这一点


我已经了解了如何使用LINQ中的SqlFunctions类来选择实体语句,但当我尝试插入数据时,这对我没有帮助。

我想你可能会被困在两次往返中。 这样做可能就足够了(为简洁起见,省略了错误处理):

往返一次以获取声音代码,然后插入它们

是的,它不是很干净,但我认为您唯一的其他选择是直接使用SQL

db.ExecuteStoreCommand(
    @"INSERT INTO People (FirstName, LastName, FirstNameSE, LastNameSE) 
    VALUES ({0}, {1}, SOUNDEX({0}), SOUNDEX({1}))"
    , vPerson.FirstName, vPerson.LastName);
请注意,
ExecuteStoreCommand
自动执行SQL参数化。(它不是
字符串.Format


实际person对象上大约有20个其他属性,因此我选择了两个往返选项。我在实际代码中实现它没有任何问题,谢谢。
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();
    }
}
db.ExecuteStoreCommand(
    @"INSERT INTO People (FirstName, LastName, FirstNameSE, LastNameSE) 
    VALUES ({0}, {1}, SOUNDEX({0}), SOUNDEX({1}))"
    , vPerson.FirstName, vPerson.LastName);