我正在尝试使用Entity Framework将对象插入到我的数据库中,其中两个属性表示SQL Server soundex函数的结果,我找不到任何指向正确方向的内容。
我的代码的简化示例:
C#Object
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选择语句中使用SqlFunctions类,但是当我尝试插入数据时,这对我没有帮助。
答案 0 :(得分: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();
}
}
进行一次往返以获取声音代码,然后插入它们。
是的,它不是很干净,但我认为你唯一的另一个选择是直接使用SQL。
db.ExecuteStoreCommand(
@"INSERT INTO People (FirstName, LastName, FirstNameSE, LastNameSE)
VALUES ({0}, {1}, SOUNDEX({0}), SOUNDEX({1}))"
, vPerson.FirstName, vPerson.LastName);
请注意ExecuteStoreCommand
会自动执行SQL参数化。 (它不是string.Format
)。
http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executestorecommand.aspx