下面是一个典型的,对我来说,L2S 中的 Update
方法。我对其中很多(L2S 和业务应用程序开发)还是很陌生,但这只是感觉不对。就像必须有一种更聪明的方法来做到这一点。不幸的是,我无法想象它,希望有人能提供一个例子或为我指明正确的方向。
为了在黑暗中试一试,我会得到一个将所有这些字段都作为属性的 Person 对象
吗?那又怎样呢?
这是否多余,因为 L2S 已经将我的人员表映射到一个类?
这只是“进展如何”吗,您最终将 30 个参数(或更多)传递给 UPDATE
语句一些点?
作为引用,这是一个使用 C#、WinForms、.Net 3.5 和基于 SQL 2005 标准的 L2S 的商业应用。
这是我的典型更新电话。这是与其他 CRUD 方法在一个文件 (BLLConnect.cs) 中。 Connect 是保存 tblPerson
的数据库的名称 当用户单击 save()
时,这就是最终的结果调用时所有这些字段都可能已更新-->
public static void UpdatePerson(int personID, string userID, string titleID, string firstName, string middleName, string lastName, string suffixID,
string ssn, char gender, DateTime? birthDate, DateTime? deathDate, string driversLicenseNumber,
string driversLicenseStateID, string primaryRaceID, string secondaryRaceID, bool hispanicOrigin,
bool citizenFlag, bool veteranFlag, short ? residencyCountyID, short? responsibilityCountyID, string emailAddress,
string maritalStatusID)
{
using (var context = ConnectDataContext.Create())
{
var personToUpdate =
(from person in context.tblPersons
where person.PersonID == personID
select person).Single();
personToUpdate.TitleID = titleID;
personToUpdate.FirstName = firstName;
personToUpdate.MiddleName = middleName;
personToUpdate.LastName = lastName;
personToUpdate.SuffixID = suffixID;
personToUpdate.SSN = ssn;
personToUpdate.Gender = gender;
personToUpdate.BirthDate = birthDate;
personToUpdate.DeathDate = deathDate;
personToUpdate.DriversLicenseNumber = driversLicenseNumber;
personToUpdate.DriversLicenseStateID = driversLicenseStateID;
personToUpdate.PrimaryRaceID = primaryRaceID;
personToUpdate.SecondaryRaceID = secondaryRaceID;
personToUpdate.HispanicOriginFlag = hispanicOrigin;
personToUpdate.CitizenFlag = citizenFlag;
personToUpdate.VeteranFlag = veteranFlag;
personToUpdate.ResidencyCountyID = residencyCountyID;
personToUpdate.ResponsibilityCountyID = responsibilityCountyID;
personToUpdate.EmailAddress = emailAddress;
personToUpdate.MaritalStatusID = maritalStatusID;
personToUpdate.UpdateUserID = userID;
personToUpdate.UpdateDateTime = DateTime.Now;
context.SubmitChanges();
}
}
因此,如果我理解正确,我将在我的 winform UI 中有一个 datacontext
引用,我将在填充字段时使用它,还可以用于更新、插入和删除。正确吗?
最佳答案
只是不要写这个方法:)
任何时候一些业务逻辑需要更新一个人的特定字段,更新那个人的特定字段(并记住在卸载 http 上下文之前更新数据上下文)
当您说“这是多余的,因为 L2S 已经将我的人员表映射到一个类吗?”时,您是在正确的轨道上。使用 L2S 提供的类即可:)
如果您有一个 (winforms) 屏幕需要编辑这个 30 字段的人员对象,那么最简单的做法是 databind屏幕上的字段直接到 linq to sql 的 Person 对象上的字段。这是一个典型的屏幕生命周期:
- 您的表单已构建(带有人员 ID)
- 您的表单的加载事件处理程序将从 Linq 到 Sql 检索一个 Person 对象:
context.tblPersons.Single(x=>x.ID == personID)
- 此人将被设置为表单的主要 BindingSource's数据源
- 屏幕上的大量文本框将被设置为绑定(bind)到该人物对象的每个字段,允许用户直接编辑属性(您只需将详细信息 View 从数据源选项卡拖到 VS 中的表单上即可自动执行这些操作)
- 当用户点击保存时,只需在 DataSource 上调用 EndEdit,然后在 L2s Datacontext 上调用 SubmitChanges
一切顺利,您应该在数据库中看到新值...
关于c# - LINQ to SQL 中更好的 UPDATE 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716174/