我想在我正在使用的asp.net网络应用程序中使用ORM工具。我把所有的课程放在一起,只是希望数据保持不变。我下载了SubSonic 3.0并开始使用简单的Repository ......这非常棒。我是ORM工具的新手,因为我在商业上的第一次体验是DataSets / Stored Procs世界已有几年了,我试图继续(甚至只是在学术上)...无论如何,简单的存储库很容易使用......除了我在数据关系方面遇到困难。我希望有一个list属性,它将被保存为两个具有外键关系等的表......
我已经看到我可以手动将额外的外键ID添加到对象中,但我现在想知道是否应该使用不同的ORM工具,因为似乎有很多......任何帮助都非常感激!
注意:我听说nhibernate几乎可以做任何事情,但是看一些“开始指南”它似乎是一个额外学习和时间的世界,与SubSonic 3.0简单存储库相比......但如果这种简单性不是'我可以买到我想要的东西,我会学到的!
修改
感谢您的所有回复和建议...我尝试了大多数建议,希望避免nhibernate但是无法...我已经在行动中购买了NHibernate并且花时间学习它我已经可以看到作为正确的决定。
答案 0 :(得分:4)
Mindscape的LightSpeed通常非常简单(它采用约定优于配置方法),并自动处理您描述的列表场景。虽然它需要表面下的外键ID,但它有一个设计师会负责为你添加(你可以拖动表,或使用设计器创建关联,设计师将自动实现外键)。有关示例,请参阅getting started screencast。
答案 1 :(得分:4)
尝试使用DataObjects.Net作为替代方案。它与亚力克完全不同。复合外键,统一密钥&版本适配器(Key
和VersionInfo
类型+ Entity.Key
和Entity.GetVersion(...)
),真正透明的引用(Subsonic根本不支持引用)和good LINQ support只是少数什么在那里的例子。
良好的起点是introduction part(从尾部开始,如果您希望先查看示例),可以从Manual开始。
答案 2 :(得分:2)
您不应该排除实体框架(或LINQ to SQL)。
我之所以通过LINQ to SQL说实体框架的原因是实体框架提供了从实体图创建数据库的能力(应该很容易从类中生成)。
这些内容都内置于.NET中,因此可以立即获得最小的麻烦。
答案 3 :(得分:2)
我真的建议NHibernate,一旦进入它就不那么复杂了,并且会为你提供大量的功能,而不是让你陷入一种心态。自从我开始使用它以来,我没有回头看过,并且经历过其他一些ORM,但从未如此令人印象深刻。
答案 4 :(得分:2)
NHibernate摇滚。我很快就用它来提高效率。查看summer of nhibernate以获取精彩的免费培训视频。它们是旧版本,但你应该能够找到差异。
答案 5 :(得分:0)
我最近遇到了你的确切问题。如果您使用的是不相关的单个实体,SimpleRepository非常棒。如果你设置在model-first-database-second范例(我是),那么我会建议Fluent NHibernate使用自动化。网站上的入门内容将帮助您快速启动并运行。唯一的问题是你必须要小心创建外国关系。确保您的主要实体和参考实体都保持彼此的映射,否则NHibernate将不会自动级联保存您创建的新参考实体。
即:
(注意:为简洁起见,食谱列表是公开的,您可能希望创建一个带有自定义get / set属性的内部字段,以在现实生活中公开此集合)
public class Recipe {
public virtual RecipeBook RecipeBook {get; set;}
public virtual string RecipeInstructions {get; set;}
}
public class RecipeBook {
public virtual IList<Recipe> Recipes { get; set; }
public virtual string BookTitle {get; set;}
public void AddRecipe(Recipe recipe) {
recipe.RecipeBook = this;
Recipes.Add(recipe);
}
}
答案 6 :(得分:0)
如果您使用SQL Server作为后端数据库,我建议使用Linq to Sql并使用VS2008附带的SQLMetal工具。你可以做NHibernate所做的一切,你不必抬起手指(更不用说没有讨厌的xmls ),只需在VS2k8命令行提示符上运行命令即可。最好的资源是Scott Gu的介绍here,然后是SQLMetal documentation。