我的EF代碼中有一個BuildingAudit類。該審計與建築物相關聯。每棟建築物只能有一次主動審計。但是,我通過類的修訂列來跟蹤對審計的更改,該列是非空整數。EF代碼首先,查詢對象,對象的int屬性始終爲1?
每次我運行一個EF查詢。修訂總是回到1,即使我的查詢包含檢查修訂等於1以外的東西。我不明白。映射中沒有任何內容會導致這種情況,POCO中沒有任何內容會在查詢後覆蓋該值。這怎麼可能發生?
這裏是我的代碼:
BuildingAudit buildingAudit = null;
if (revision == null)
{
buildingAudit = _buildingAuditService.CustomQuery().Where(x => x.BuildingId == selectedBuilding.Id).OrderByDescending(x => x.Revision).FirstOrDefault();
}
else
{
buildingAudit = _buildingAuditService.CustomQuery().FirstOrDefault(x => x.BuildingId == selectedBuilding.Id && x.Revision == revision);
}
對於那些想知道CustomQuery()僅僅是一般EF暴露的Context.Set爲可查詢:
public virtual IQueryable<TClass> Query()
{
return Context.Set<TClass>().AsQueryable();
}
而且我POCO:
public class BuildingAudit : Entity
{
public Guid BuildingId { get; set; }
public virtual Building Building { get; set; }
public virtual ICollection<AuditCategory> AuditCategories { get; set; }
public Guid Auditor { get; set; }
public virtual User Auditor { get; set; }
public bool IsComplete { get; set; }
public int Revision { get; set; }
public BuildingAudit()
{
InitializeCollections();
}
private void InitializeCollections()
{
AuditCategories = new Collection<AuditCategory>();
}
}
這個類繼承的實體只有這個:
public abstract class Entity
{
public Guid Id { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public string CreatedBy { get; set; }
public string LastModifiedBy { get; set; }
public bool Active { get; set; }
}
所以沒有什麼不可思議的。然而,每次我調試這個查詢時,它都會轉到else語句,在.Where中提供的修訂版本不是1,例如2。但是,當對象返回時,它的修訂版本爲1!
任何人有什麼想法?
這裏有一些照片,我不得不作物隱藏一些敏感信息,但他們是從通過上述粘貼代碼運行一個調試:
這從其他檢查修正值的聲明,清楚地顯示返回所選建築物的版本= 2的審覈。然後:
返回的對象屬性已修訂1 ...還應當指出的是,我能救其他值比1和數據庫中正確反映了,但我似乎無法查詢任何東西其他大於1
解答:
if (revision == null)
{
assessment = _hazardAssessmentService.CustomQuery().Where(x => x.LaboratoryId == selectedLab.Id).OrderByDescending(x => x.Revision).FirstOrDefault();
}
else
{
int rev = (int) revision;
assessment = _hazardAssessmentService.CustomQuery().FirstOrDefault(x => x.LaboratoryId == selectedLab.Id && x.Revision == rev);
}
修訂在此函數可爲空的INT,但對POCO是普通int。將修訂版本轉換爲純粹的int使得停止發生。我正在檢查它是否爲空,並且它永遠不會出現在if中的這一部分,但不知道爲什麼這會導致EF在沒有通知任何錯誤的情況下中斷。
我無法從你的POCO知道你的PK在你的BuildingAudit表上。我想知道如果EF也不能,並因此而錯誤地填充對象。 – Tim
它只是一個從實體繼承的ID屬性,我的所有對象都有。 – SventoryMang
也只是爲了澄清,表本身具有正確的ID屬性作爲PK。修訂只是一個簡單的專欄。 – SventoryMang