由于我是PetaPoco的新手,也是NHIbernate的正式用户,我想知道是否以及如何使用petapoco映射组件。
两个班级:
[ExplicitColumns]
public class Event{
[Column]
public int Id {get;set;}
[Column]
public DateTime Start {get;set;}
[Column]
public DateTime Start {get;set;}
...
[???]
public EventLocation Location {get;set;}
}
[ExplicitColumns]
public class EventLocation{
[Column]
public int Id {get;set;}
[Column]
public string Name {get;set;}
[Column]
public string Street {get;set;}
[Column]
public string Zip {get;set;}
[Column]
public string City {get;set;}
}
有没有办法用PetaPoco来映射?目前,事件位置不会持久存在。我是否必须编写自定义组件映射器?
更新:我尝试过tims解决方案(我自己发现了一个模拟解决方案),但现在我遇到了同名属性的问题。 EventLocations
的ID已正确设置,但不适用于Event
参考。
答案 0 :(得分:0)
是的,PetaPoco确实支持多poco查询。这里有一个博客,其中包含一些示例代码:http://blogs.lessthandot.com/index.php/desktopdev/mstech/csharp/more-petapoco-id-s-and/
理论上,假设您使用[ResultColumn]
属性装饰您的Location属性,您应该可以执行以下操作(请注意,这只是说明性示例代码,可能实际上不适用于您的数据库):
var results = db.Query<Event, EventLocation>(@"
SELECT Event.*, EventLocation.*
FROM Event
INNER JOIN EventLocation ON Event.LocationID = EventLocation.Id );