我有一张表是图片和其他文件类型的表。我想编辑名称字段。通常我会这样做:
var file = Db.Files.First(f => f.FileID == id);
file.Name = "NewName";
Db.SaveChanges();
但是,在这种情况下,这将无缘无故地从数据库服务器中提取整个varbinary(max)。有没有办法在不获取整个EntityObject的情况下编辑项目?也许我可以使用存根实体或什么?
答案 0 :(得分:3)
你也可以使用这个简单的技巧:
// 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();
它将为您保存对数据库的查询。
答案 1 :(得分:1)
您可以将实体拆分为两个实体,并将昂贵的数据列移动到第二个实体。查看“Table Splitting”: Mapping multiple entity types to the same table.