我正在我的服务层中尝试返回一个Parent,该Parent包含我需要过滤的Child对象的集合。只有子对象被过滤,所以即使过滤器意味着0个子对象,仍然会返回父对象。
从下面的代码中可以看出,我在这里尝试使用的方法非常简单。我已经研究了其他似乎相似但尚未得到答案的SO问题。
我知道这可以通过向Mapping添加WHERE子句来解决,但这确实可以让你级联删除。
使用以下代码时,抛出以下异常:
拥有实体实例不再引用具有cascade =“all-delete-orphan”的集合:Project.Properties
//实体
public class Project
{
public virtual int Id { get; set; }
private ICollection<Property> properties = new List<Property>();
public virtual ICollection<Property> Properties
{
get { return properties; }
set { properties = value; }
}
}
public class Property
{
public virtual DateTime? DateDeleted { get; set; }
}
// Fluent NHibernate Mapping
mapping.HasMany<Property>(x => x.Properties)
.ForeignKeyConstraintName("Project_Id")
.AsSet()
.Cascade.AllDeleteOrphan()
.OrderBy("Estate_Id");
//服务层:调用项目存储库。仅返回具有活动属性的项目
private ProjectDto GetActiveProject(int id)
{
var p = projectRepository.Get(id);
//filter out deleted properties
if (p != null)
p.Properties = p.Properties.Where(x => x.DateDeleted == null).ToList();
return projectTransformer.Transform(p);
}