在 Umbraco 中使用实体框架或任何其他 ORM
Posted
技术标签:
【中文标题】在 Umbraco 中使用实体框架或任何其他 ORM【英文标题】:Using Entity Framework or any other ORM in Umbraco 【发布时间】:2012-12-05 09:57:55 【问题描述】:我正在尝试查找一些文档/文章,其中有人在 umbraco 中集成了实体框架(或任何其他 ORM 工具),而不是使用基于良好旧文本的 SQL 查询。
到目前为止,如果我想查询 umbraco 数据库,我已经写了如下内容:
ISqlHelper SqlHelper = DataLayerHelper.CreateSqlHelper(umbraco.GlobalSettings.DbDSN)
SqlHelper.ExecuteNonQuery(@"insert into Table(id,ColumnName) values(@id,@ColumnName)",
SqlHelper.CreateParameter("@Id", -1), SqlHelper.CreateParameter("@ColumnName", foobar),
这很好(不要误会我的意思),但我认为使用某种 ORM 工具会更好。
关于如何使用连接现有 Umbraco 表和新表的 ORM 工具有什么想法/想法?
【问题讨论】:
【参考方案1】:我在我的 umbraco 应用程序中广泛使用 EF,它工作得很好,但不能操纵核心 umbraco 表;我用它来操作我添加到数据库中的自定义表。
我什至不确定 umbraco 表是否会默认设置所有正确的外键和/或索引以优化 EF 的使用并使其值得。
如果您只是想要一个让核心表更易于访问的包装器,请考虑使用轻量级包,例如 dapper。
【讨论】:
【参考方案2】:我在很多 Umbraco 项目中使用过 Linq to SQL,但在去年转而使用 PetaPoco。 PetaPoco 非常轻量级,易于学习、实现和使用。它也非常快。
我发现 EF 和 Linq to SQL 对 Subversion 不是特别友好,当两个或多个开发人员处理相同的数据模式时会导致冲突。
我还发现使用 DI 实现 PetaPoco 更加直接,因为无需考虑上下文。对我来说,这与 Umbraco 4.10+ 项目的 MVC 实现非常契合。
更新:
在继续使用 Umbraco v6+(它本身使用 PetaPoco)后,我经常发现我什至不需要安装 ORM,因为我可以使用 Umbraco 自己的数据库对象,因为正如我所说的实际上是 PetaPoco。但是,当我需要更多“咕噜”的东西时,我会选择 NHibernate 或 EF,但这些情况很少见,如果可能的话,我仍然很乐意使用 Petapoco 或 NPoco。
【讨论】:
“可能”的源代码控制部分只有在您使用 edmx 时才会出现问题。我说的是 POCO 对象,它适用于任何源代码控制系统。当然,问题的一部分是在 svn 中拥有像 TFS 这样的独家结帐并不是很直接的 :)【参考方案3】:这是我的两分钱。 :)
EF 或任何您可以采用和选择的 ORM 映射器在 umbraco 生态系统中满足您的需求。好处是您可以采用自己的查询编写模式来查询 Umbraco DB。它会完美地工作。
一旦你采用了 EF,你就会有如下的疑问。
var q = from p in cmsContentType.Include("umbracoNode")
同样......您还可以使用一些类包装器来保存 EDMX 中存在的 umbraco 表的实体。
但是,如果您打算在同一个数据库中创建一些自定义表和 Umbraco 表,那么我建议您创建两个 EDMX 文件 - 1 个用于 Umbraco 表,2 个 Nd 用于自定义表。通过这种方式,您可以减轻一个 EDMX 文件的负担并提高性能。
回答您的问题...尽管没有可用的文档来执行此操作..您可以认为自己有很多表并将它们放在 EDMX 上并开始使用它。
下面是我数据库中的图像,它是香草味的 umbraco。
【讨论】:
我不是 edmx tbh 的忠实粉丝。我更喜欢 POCO,它给了我更大的灵活性。无论哪种方式,您都不会遇到@e-j-brennan 描述的相同问题吗? 我是 e-j-brennan @ SO 的边缘粉丝,但我认为 Umbraco 的 DB 模式定义良好.. 如果你想自己安装一个新模式并查看 SQL 中的数据库图服务器他们有良好的FK-PK关系。根据我。因此,您也不会遇到 EDMS 的问题。以上是关于在 Umbraco 中使用实体框架或任何其他 ORM的主要内容,如果未能解决你的问题,请参考以下文章