我正在通過MVC Storefront代碼工作並嘗試遵循存儲庫,服務和poco模型,而不是dbml/data上下文的路徑。實際上很容易,直到我開始編寫測試,並且以我不明白的方式失敗。IQueryable,Where,Guid和
在我的情況下,主鍵是一個uniqueidentifier而不是一個int字段。該庫返回一個IQueryable:
public IQueryable<Restaurant> All()
{
return from r in _context.Restaurants select new Restaurant(r.Id)
{
Name = r.Name
};
}
在這種情況下,餐廳當然是Models.Restaurant,而不是_context.Restaurants.Restaurant。
過濾服務類(或庫單元測試)對所有的(),這個作品只是預期:
var results = Repository.All().Where(r => r.Name == "BW<3").ToList();
這只是正常,有一個Model.Restaurant。現在,如果我嘗試用PKID同樣的事情:
var results = Repository.All().Where(r => r.Id == new Guid("088ec7f4-63e8-4e3a-902f-fc6240df0a4b")).ToList();
如果與失敗:
The member 'BurningPlate.Models.Restaurant.Id' has no supported translation to SQL.
如果看到了一些similiar帖子裏的人說,這是因爲R => r.Id爲[模型。餐廳]是linq2sql層不知道的課程級別。對我而言,這意味着第一個版本也不應該起作用。當然,如果我的pk是一個int,它就可以工作。
這裏究竟發生了什麼?上帝知道,做一件事,一件不行,不是很直觀。我誤解了什麼?
嗯,是的,沒有。 :-) 我試着r => Equals(r.Id,new Guid())和Equals(r.Id,idvar)版本有相同的錯誤。 我還沒有試過r => r.Id.Equals(idvar)。我不能說我已經看到了這種變化。 – claco 2009-05-01 12:51:25
Repository.All()。其中(r => r.Id.Equals(id))。ToList(); 同樣的錯誤。 – claco 2009-05-01 23:10:27