C# 如何在实体框架插入上使用SqlFunctions.SoundCode?
我试图使用Entity Framework将一个对象插入数据库,其中两个属性表示SQL Server soundex函数的结果,但我找不到任何指向正确方向的内容 我的代码的一个大大简化的示例: C#对象 表结构: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
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);