我想在我的服務層返回一個父對象,我需要過濾一個集合。只有子對象被過濾,即使過濾器意味着仍然返回Parent對象的子對象。NHibernate/LINQ /過濾器子集合
正如你可以從下面的代碼看到的,我試圖在這裏使用的方法非常簡單。我查看了其他類似的問題,但似乎還沒有得到答案。
- 我不需要在數據庫查詢時發生過濾器,如果可能的話,也可以。
- 如果使用單個LINQ語句,那麼過濾所有子對象仍應返回父(項目)。
我知道這可以通過向映射添加WHERE子句來解決,但這可以讓您級聯刪除。
使用下面的代碼下面的異常被拋出:
與級聯集合=「全刪除,孤兒」由所擁有的實體實例不再被引用: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; }
}
//功能NHibernate映射
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);
}