我想以最佳实践开始这个新项目。我有很多表链接在一起。例如:
Person
- ID
- FirstName
- LastName
User
- ID
- PersonID
- AddressID
Address
- ID
- Line1
- Line2
显然,我必须使用UserView
视图才能在应用程序中高效。该视图将这三个表格组合在一起。
现在,当有人对用户进行更改时,我将不得不单独查询所有三个表,进行更改然后更新。
private void updateUser(UserView userView)
{
using (var context = getNewContext()
{
var person = context.Person.first(c => c.ID == userView.PersonID)
person.FirstName = userView.FirstName;
person.LastName = userView.LastName;
context.SaveChanges();
var user = context.User.first(c => c.ID == userView.UserID)
//and so on for the 3 tables
}
}
必须有一种更有效的方式来更新表格!你知道诀窍吗?
答案 0 :(得分:1)
我假设你正在使用实体框架。如果您有导航属性,您可以在一次数据库中急切加载对象图,更新字段然后保存。
var user = context.User.Include("Person").Include("Address").First(c => c.ID == userView.UserID);
user.Person.FirstName = userView.FirstName;
user.Person.LastName = userView.LastName;
user.Address... // etc.
如果您使用的是Linq2Sql,则必须使用DataLoadOptions。有一个blog post解释了EF和Linq2Sql之间的区别。