C# 实体框架部分加载

C# 实体框架部分加载,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我的表中有以下列 Id(int) 名称(nvarchar)通常少于100个字符 数据(nvarchar)平均1MB 我正在编写一个程序,它将遍历每一行并对Name字段执行一些操作。由于我只使用名称字段,而数据字段非常大,是否可以指示EF仅加载Id和名称字段?当然可以 ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name}); 此方法正在选择一个匿名类 如果要再次保存,可以使用我称之为虚拟实体的东西: foreach(var t

我的表中有以下列

  • Id(int)
  • 名称(nvarchar)通常少于100个字符
  • 数据(nvarchar)平均1MB
我正在编写一个程序,它将遍历每一行并对Name字段执行一些操作。由于我只使用名称字段,而数据字段非常大,是否可以指示EF仅加载Id和名称字段?

当然可以

ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name});
此方法正在选择一个匿名类

如果要再次保存,可以使用我称之为虚拟实体的东西:

foreach(var thing in ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name}))
{
    var dummy = new YourEntity{Id = thing.Id};
    ctx.YourDbSet.Attach(dummy);
    dummy.Name = thing.Name + "_";
}
ctx.SaveChanges();
此方法与快照跟踪一起使用,因为EF仅跟踪在update语句中发送回的attach调用之后所做的更改。这意味着您的查询将只包含该实体上name属性的更新(即它不会接触数据)


注意:您要确保在严格控制的上下文中执行此操作,因为无法附加已附加到EF跟踪图的对象。在上述情况下,select将而不是将实体作为其匿名对象附加到图形上(因此使用相同的上下文是安全的)

唯一的问题是我需要保存对p.Name的更改