在我们的下一个项目中,我们需要使用这样的接口(示例代码)
public interface IFoo
{
string Name {get; set;}
IList<IBar> Bars {get; set;}
}
public interface IBar
{
string Name {get;set;}
IList<IFoo> Foos {get;set;
}
public class Foo : IFoo
{
public string Name {get; set;}
public IList<IBar> Bars {get; set;}
}
public class Bar : IBar
{
public string Name {get; set;}
public IList<IFoo> Foos {get;set;}
}
显然,在应用程序层,我们希望使用这些接口,而且对实现类没有任何了解。
我一直在看几个OR / M - 我们目前拥有LLBLGen,我已经尝试过EntityFramework,这是一个噩梦,也没有让它工作,看着NHibernate,但事实上是开始程序是如此复杂,相对于LLBLGen吓坏了我(但我仍然对NHibernate开放,如果它支持我的需要)。
所以,我正在寻找:一个简单的OR / M,我可以使用最小的设置要求(LLBLGen你只需使用他们的工具来反向工程你的数据库,生成源代码,你就可以开始编码),支持上面的结构。
旁注:有谁能告诉我我要找的模式是什么? (除了超级懒惰;))
答案 0 :(得分:1)
// mappings
public class FooMap : ClassMap<Foo>
{
public FooMap()
{
Map(f => f.Name);
HasMany(f => f.Bars).KeyColumn("foo_Id");
}
}
public class BarMap : ClassMap<Bar>
{
public BarMap()
{
Map(f => f.Name);
}
}
// query
var john = session.Query<IFoo>()
.Where(f => f.Name == "John")
.Fetch(f => f.Bars)
.Single();
Console.Writeline(john.Bars.Count);
答案 1 :(得分:0)
LLBLGen Pro v3.x可以为您生成实体类的接口(您可以使用宏指定名称,并在项目级别定义它,因此它根本不起作用),并且使用简单的模板,你也可以生成接口。
但是,您是否在多个实体上重用接口?在这种情况下,您可能希望通过接口进行查询,并获取实现该接口的所有类型的所有实例。并非所有ORM都支持(我认为NHibernate会支持,我们自己的运行时和EF不支持)