0

我的模型中有两个主要实体。报告(也称为报告表)和报告文件夹(也称为表)

 [DataContract(IsReference = true)]
    public partial class Report
    {
        public Report()
        {
            this.DataSources = new List<DataSource>();
            CreationDate = DateTime.Now;

        }
        [DataMember]
        public long Id { get; set; }
        [DataMember]
        public long ReportFolderId { get; set; }
        [DataMember]
        public virtual ReportFolder ReportFolder { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string ReportContent { get; set; }
......

    }
[DataContract(IsReference = true)]
public partial class ReportFolder
{
    public ReportFolder()
    {
        this.Reports = new List<Report>();
        this.Folders = new List<ReportFolder>();
        CreationDate = DateTime.Now;
    }

    [DataMember]
    public long Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Description { get; set; }
    [DataMember]
    public long? ParentId { get; set; }
    [DataMember]
    public virtual ICollection<Report> Reports { get; set; }
    [DataMember]
    public virtual ICollection<ReportFolder> Folders { get; set; }
.....
}

所以问题是,我在两种情况下使用我的报告,在一种情况下我需要加载所有带有报告的 ReportFolders,在这种情况下我不想加载 ReportContent(它是一个沉重的文件)。在另一种情况下,我想加载并保存包含所有字段的报告。基于我的搜索 entityframework 不支持部分加载字段。

然后我决定继承表单 Report 并创建另一个名为 ReportWithContent 的类,并在此类映射 ReportContent 字段(也删除此归档的表单 Report 类)并在不同的场景中使用这两个类(将一个表单客户端发送到服务器并响应另一个表单客户端防止大量数据传输)但我没有成功它需要一个我没有的鉴别器(EF例外)。在这种情况下,我正在考虑在不映射 ReportContent 的情况下使用 Report,无论我应该使用 ReportContent 的任何操作,我都必须使用纯 Sql,我不知道这是否是一个好习惯。

4

1 回答 1

1

无法使用 EF 延迟加载原始属性。所有原始属性都会自动加载。

一种解决方案是将报表的内容包装在另一个实体中,并使用该实体而不是Report类中的字符串属性。

public class ReportContent {
    public int ID { get; set; }
    public string Text { get; set; }
}

public class Report {
    ...
    public virtual ReportContent Content { get; set; }
    ...
}
于 2013-10-17T14:02:12.197 回答