我的一个表中有一个 varbinary(max) 字段,但我并不每次都需要它,我正在寻找一种仅在必要时从数据库中获取它的方法。我正在使用 ADO.NET 实体框架。怎么做?
Emil
问问题
3584 次
5 回答
6
解决方案是使用 varbinary 字段创建一个单独的表,并在表之间建立一对一的关系
于 2009-03-20T11:44:02.157 回答
4
不一定要创建单独的表。你应该做几个步骤。假设我们有表“文档”(Id、Name、Data (varbinary))。
- 打开 EF 设计器,复制并粘贴“文档”实体。
- 将其重命名为“DocumentData”。将映射添加到“文档”表。
- 删除“文档”实体中的“数据”属性。
- 删除“DocumentData”实体中的“名称”属性。
- 右键单击“DocumentData”实体并添加新的关联。选择与“文档”实体的一对一关联。
- 选择新关联,转到属性,单击“引用约束”字段上的“...”,选择“文档”实体作为主体,将所有内容保留为默认值(Id -> Id),然后单击“确定”。
现在构建项目。
笔记。现在,在创建新的“文档”实体时,即使您还不想放置任何数据,您也应该创建新的“文档数据”实体:
Document doc = new Document();
doc.Name = "My document";
doc.DocumentData = new DocumentData();
context.Documents.Add(doc);
context.SaveChanges();
于 2011-01-29T12:45:02.020 回答
1
一种方法是在不需要 blob 时将结果集投影为匿名类型:
from entity in context.Entities
select new
{
Field1 = entity.Field1,
Field2 = entity.Field2
}
在此示例中,仅加载 Field1 和 Field2。
此方法的缺点是您无法更新返回的实例并执行 context.SaveChanges。尽管我认为在不完全了解实例的情况下保存实例是不安全的。当您想要返回实例的长列表时,此方法很好,但在实际更新之前将查询单个实例、varbinary 字段和所有。
于 2009-03-19T17:23:02.537 回答
1
您应该从表中删除您的 varbinary 字段,并将其放在另一个表中,在它们之间建立一对一的关系。这是一个很好的做法,因为您可以轻松实现延迟加载和其他内容。
于 2012-09-18T19:03:07.800 回答
0
表拆分。Entity Developer工具允许直观地执行此操作。您可以将实体映射到不同的表。
于 2011-02-09T16:57:27.190 回答