【发布时间】:2015-06-01 11:52:35
【问题描述】:
我有一个名为 Document 的类,我将其拆分为两个实体,以便分隔一个昂贵的二进制字段:
[Table("Document")]
public class Document
{
[Key]
public int Id { get; set; }
... other fields ...
[Required]
public virtual DocumentBinary DocumentBinary { get; set; }
}
[Table("Document")]
public class DocumentBinary
{
[Key, ForeignKey("Document")]
public int DocumentId { get; set; }
public Document Document { get; set; }
public byte[] DocumentData { get; set; }
}
所以,一切正常,两个实体共享同一个数据库表,并且 DocumentData 仅在需要时加载。
但是,在更新 Document 实体时,我收到一条错误消息,指出 'DocumentBinary is required'。
当我从 DocumentBinary 虚拟属性中删除 [Required] 属性时,我收到以下错误:
实体类型“Document”和“DocumentBinary”不能共享表“Documents”,因为它们不在同一类型层次结构中,或者它们之间没有有效的一对一外键关系和匹配的主键。
我显然可以这样做:
var test = document.DocumentBinary;
更新文档对象之前:
documentRepository.Update(document);
这将根据我的请求加载二进制数据并保存更改而不会出现任何问题,但重点是我不需要这样做。
【问题讨论】:
标签: entity-framework