使用实体框架修改字段没有EntityObject

问题描述:

我有一个表是图片和其他文件类型的表。我想编辑名称字段。通常我会做到这一点:使用实体框架修改字段没有EntityObject

var file = Db.Files.First(f => f.FileID == id); 
file.Name = "NewName"; 
Db.SaveChanges(); 

然而,在这种情况下,这将拉动从无缘无故数据库服务器的整个VARBINARY(MAX)。有没有办法编辑一个项目而没有获得整个EntityObject?也许我可以使用存根实体或其他东西?

您也可以使用这个简单的一招:

// Define a dummy object 
var file = new File { Id = id, Name = "NewName" }; 
// The dummy object attached as Unchanged entity 
context.Files.Attach(file); 
// Get change tracking information about the entity 
ObjectStateEntry entry = context.ObjectStateManager.GetObjectStateEntry(file); 
// Set Name property to modified 
entry.SetModifiedProperty("Name"); 
// Save changes - only Name property will be modified 
context.SaveChanges(); 

它会询问您保存到数据库中。

+0

正是我在找的东西。谢谢 – tster 2011-03-24 13:06:51

您可以将实体分成两个实体并将昂贵的数据列移动到第二个实体。检查“Table Splitting”: Mapping multiple entity types to the same table.

+0

我宁愿不为此修改我的模式。 – tster 2011-03-23 16:55:51

+0

它不修改数据库模式。它是被修改的实体。带下划线的表格是相同的。但是,是的,如果你不能或不想分割实体,我唯一能想到的就是使用和执行只更新所需列的自定义SQL。 – 2011-03-23 18:17:40

+0

哦,我明白了。我可能会这样做。好建议。 – tster 2011-03-23 18:19:54