欢迎光临

木子屋

标题: ASP.NET MVC3 + Entity Framework实现数据按需更新

作者: dnawo

日期: 2012-11-15 03:17 PM

分类: Web编程

内容: 1.Entity Framework支持数据按需更新吗？
ASP.NET MVC3 + Entity Framework要实现数据按需更新，前提条件是Entity Framework要支持数据按需更新。我们先做个测试验证下，下边是一个实体类：
复制内容到剪贴板 程序代码public class Pet
{
public Pet()
{
this.Id = 0;
this.PersonId = 0;
this.Name = "";
}
public int Id { get; set; }
public Nullable<int> PersonId { get; set; }
public string Name { get; set; }
}
Entity Framework更新数据：
复制内容到剪贴板 程序代码testContext db = new testContext();
Pet pet = db.Pets.FirstOrDefault();
pet.Name = "newname1";
db.SaveChanges();
SQL Server Profiler跟踪结果：
引用内容exec sp_executesql N'update [dbo].[Pet]
set [Name] = @0
where ([Id] = @1)
',N'@0 nvarchar(20),@1 int',@0=N'newname1',@1=1
可见，Entity Framework支持数据按需更新。
2.ASP.NET MVC3 + Entity Framework还是按需更新吗？
View(注意没有PersonId)：
复制内容到剪贴板 程序代码@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Pet</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
Controller：
复制内容到剪贴板 程序代码[HttpPost]
public ActionResult Edit(Pet pet)
{
if (ModelState.IsValid)
{
db.Entry(pet).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(pet);
}
SQL Server Profiler跟踪结果：
引用内容exec sp_executesql N'update [dbo].[Pet]
set [PersonId] = @0, [Name] = @1
where ([Id] = @2)
',N'@0 int,@1 nvarchar(20),@2 int',@0=0,@1=N'newname2',@2=1
很明显，PersonId使用了默认值进行更新，下边我们对Controller代码稍做修改：
复制内容到剪贴板 程序代码[HttpPost]
public ActionResult Edit(Pet pet)
{
if (ModelState.IsValid)
{
//var entry = db.Entry(pet);[1]
var entry = db.Entry(db.Pets.Attach(pet));
entry.Property("Name").IsModified = true;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(pet);
}
SQL Server Profiler跟踪结果：
引用内容exec sp_executesql N'update [dbo].[Pet]
set [Name] = @0
where ([Id] = @1)
',N'@0 nvarchar(20),@1 int',@0=N'newname3',@1=1
可见，修改后ASP.NET MVC3 + Entity Framework实现了数据按需更新：）
补充说明
[1].一定要有db.Pets.Attach(pet)，否则运行会出错，提示：
引用内容Member 'IsModified' cannot be called for property 'Name' because the entity of type 'Pet' does not exist in the context. To add an entity to the context call the Add or Attach method of DbSet<Pet>.

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.102 ms

返回

标题: ASP.NET MVC3 + Entity Framework实现数据按需更新

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.102 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.133 ms

返回