我需要根据 ActiveRecord 类的子对象进行查询(FindByFleetAndJob()
下面)。通常我会使用对象的实例,但在这种情况下我没有它们,并且不想为了获取查询对象而对数据库进行两次访问。我尝试了以下操作,为表达式创建虚拟对象:
[ActiveRecord("Alerts")]
public class Alert : ActiveRecordBase<Alert>
{
[PrimaryKey]
public int Id { get; set; }
[BelongsTo("AssociatedFleetId")]
public Fleet AssociatedFleet { get; set; }
[BelongsTo("AssociatedJobId")]
public Job AssociatedJob { get; set; }
...
public static Alert[] FindByFleetAndJob(int fleetId, int jobId)
{
var criteria = new List<ICriterion>();
criteria.Add(Expression.Eq("AssociatedFleet", new Fleet { Id = fleetId }));
criteria.Add(Expression.Eq("AssociatedJob", new Job { Id = jobId }));
return FindAll(criteria.ToArray());
}
}
我已经用其他查询成功地做到了这一点,但由于某种原因,这个抛出:
对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:DataObjects.Job,实体:DataObjects.FCJob#123
所以我的问题是,有没有办法解决这个异常,或者有没有办法改变查询以只传递子对象的 id,而不是对象本身?可以理解,执行以下操作不会找到名为 AssociatedJobId 的属性:
criteria.Add(Expression.Eq("AssociatedJobId", jobId));
虽然这基本上是我想要实现的。
非常感谢。