Ich arbeite mich durch den MVC Storefront-Code und versuche, den Pfad eines Repositorys, eines Service und eines Modells, das ein poco ist, außerhalb des dbml/data-Kontextes zu folgen. Es ist ziemlich einfach, tatsächlich zu folgen, bis ich anfing, Tests zu schreiben, und die Dinge versagten auf eine Weise, die ich einfach nicht verstehe.IQueryable, wo, Guid und
In meinem Fall ist der Primärschlüssel eine eindeutige Kennung anstelle eines int-Felds. Das Repository gibt ein IQueryable:
public IQueryable<Restaurant> All()
{
return from r in _context.Restaurants select new Restaurant(r.Id)
{
Name = r.Name
};
}
In diesem Fall Restaurant ist ein Models.Restaurant natürlich und nicht _context.Restaurants.Restaurant.
Filterung in der Serviceklasse (oder in Repository Unit-Tests) gegen Alle(), das funktioniert wie erwartet:
var results = Repository.All().Where(r => r.Name == "BW<3").ToList();
Dies funktioniert gut, hat man Model.Restaurant. Nun, wenn ich die gleichen Dinge mit dem PKID versuchen:
var results = Repository.All().Where(r => r.Id == new Guid("088ec7f4-63e8-4e3a-902f-fc6240df0a4b")).ToList();
Wenn nicht mit:
The member 'BurningPlate.Models.Restaurant.Id' has no supported translation to SQL.
Wenn einige similiar Beiträge gesehen, wo die Leute sagen, es ist, weil r => r.Id [Model ist. Restaurants] ist eine Klassenstufe, die der linq2sql-Ebene nicht bekannt ist. Für mich bedeutet das, dass auch die erste Version nicht funktionieren sollte. Natürlich, wenn mein PC ein Int ist, funktioniert es gut.
Was ist hier wirklich los? Gott weiß, es ist nicht sehr intuitiv, wenn man arbeitet und nicht arbeitet. Was verstehe ich falsch?
Und tatsächlich war das mein Problem. Danke Rob! – claco