我的模型中有两个主要实体。报告(也是报告表)和ReportFolder(也是表格)
[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; }
.....
}
所以问题是,我在两个场景中使用我的报告,在一个我需要在这个场景中加载所有带有Reports的ReportFolders我不想加载ReportContent(它是一个沉重的文件)。 在另一种情况下,我想加载并保存包含所有字段的报告。 基于我的搜索实体框架不支持部分加载字段。
然后我决定继承表单Report并创建另一个名为ReportWithContent的类,并在此类映射ReportContent字段中(也删除此字段的Report类)并在不同的场景中使用这两个类(将一个表单客户端发送到服务器并响应另一个客户端,以防止大量数据传输)但我没有成功它需要一个我没有的鉴别器(EF例外)。 我想在没有映射ReportContent的情况下报告,在这种情况下我应该使用什么操作ReportContent我将不得不使用普通的Sql,我不知道这是一个好习惯。
答案 0 :(得分: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; }
...
}