對於我的ASP.NET MVC 2應用程序,我使用Entity Framework 1.0作爲我的數據訪問層(存儲庫)。但我決定我想要返回POCO。我第一次遇到一個問題,當我想要通過他們的可選標識獲得品牌列表時。以下是我所做的:Linq to Entities和POCO外鍵關係映射(1到0..1)問題
public IQueryable<Model.Products.Brand> GetAll()
{
IQueryable<Model.Products.Brand> brands = from b in EntitiesCtx.Brands.Include("Logo")
select new Model.Products.Brand()
{
BrandId = b.BrandId,
Name = b.Name,
Description = b.Description,
IsActive = b.IsActive,
Logo = /*b.Logo != null ? */new Model.Cms.Image()
{
ImageId = b.Logo.ImageId,
Alt = b.Logo.Alt,
Url = b.Logo.Url
}/* : null*/
};
return brands;
}
您可以在評論中看到我想達到的目標。它工作得很好,只要Brand
有Logo
,否則它通過一個例外,你可以將null分配給非空類型int(對於Id)。我的解決方法是在POCO類中使用空值,但這不是自然的 - 那麼我不僅要檢查Logo
是否在我的服務層或控制器和視圖中爲空,而且大多數爲Logo.ImageId.HasValue
。如果ID爲null
,那麼擁有非null
Logo
屬性是沒有理由的。
任何人都可以想到更好的解決方案嗎?
如果Logo無效且ImageId爲空,那麼這將表明您的基礎數據庫存在問題。如果您的EF ORM將Logo對象的ImageId屬性映射到Nullable,這可能是因爲數據庫中的列接受空值,但如果它是關鍵字段,則不應接受空值。 –
jeffora
2010-04-14 05:43:43