【发布时间】:2013-02-11 16:31:09
【问题描述】:
在我们的下一个项目中,我们需要使用这样的接口(示例代码)
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,您只需使用他们的工具对您的数据库进行逆向工程,并生成源代码,然后您就可以开始编码了),它支持上面的结构。
附带说明:谁能告诉我我正在寻找的模式叫什么? (除了超懒惰的;))
【问题讨论】:
-
实体框架远非噩梦。但是,我不知道您尝试了哪种方法,因为基本上有两种方法:代码优先和模型优先。如果您采用模型优先,您可以自定义用于生成实体的 T4 模板以生成任何代码(在您的情况下,这些接口也是如此)
-
@HighCore 看看这个:stackoverflow.com/questions/14631309/… - 我花了 4 天时间才让它工作。使用 LLBLGen,我可以调用 adapter.Save(myEntity);一切都会开箱即用。我首先将 DB 与 EF 一起使用。
-
再一次,我不知道你在用什么。我们将 Entity Framework 4.0 与 STE 模板一起用于客户端/服务器应用程序。它工作得很好,没有你在那里描述的问题。
-
context.ApplyChanges()和context.SaveChanges()是将整个对象图保存到实体框架中的数据库所需的全部内容。我不知道附加的所有东西是什么。如果您是db.ApplyChanges(account),那么SaveChanges()它会保存帐户及其所有地址、电话和任何相关实体。 -
@HighCore 如果可行,他们为什么要删除 STE?我相信我用过 EF 5 或 6
标签: c# entity-framework nhibernate orm llblgenpro