我的一个表中有一个varbinary(max)字段,但我不是每次都需要它,而且我正在寻找一种只在必要时从数据库中获取它的方法。我正在使用ADO.NET实体框架。怎么做?
答案 0 :(得分:6)
解决方案是使用varbinary字段创建一个单独的表,并在表之间建立一对一的关系
答案 1 :(得分:4)
不一定要创建单独的表。你应该做几个步骤。假设我们有表'Documents'(Id,Name,Data(varbinary))。
现在建立项目。
请注意。现在,在创建新的“文档”实体时,即使您不想放置任何数据,也应该创建新的“DocumentData”实体:
Document doc = new Document();
doc.Name = "My document";
doc.DocumentData = new DocumentData();
context.Documents.Add(doc);
context.SaveChanges();
答案 2 :(得分:1)
一种方法是在不需要blob时将结果集投影为匿名类型:
from entity in context.Entities
select new
{
Field1 = entity.Field1,
Field2 = entity.Field2
}
在此示例中,仅加载Field1和Field2。
此方法的缺点是您无法更新返回的实例并执行context.SaveChanges。虽然我认为在没有完全了解实例的情况下保存实例是边缘不安全的。当你想要一个返回实例的长列表时,这个方法很好,但是在你真正更新之前将查询单个实例,varbinary字段和所有实例。
答案 3 :(得分:1)
您应该从表中删除varbinary字段,并将其放在另一个表中,在这些表之间建立一对一的关系。 这是一个很好的做法,因为你可以轻松实现延迟加载和其他东西..
答案 4 :(得分:0)
表拆分。 Entity Developer工具允许直观地执行此操作。您可以将实体映射到不同的表。