首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用微ORM时的最佳策略?

使用微ORM时的最佳策略?
EN

Stack Overflow用户
提问于 2012-04-10 18:03:21
回答 3查看 5.5K关注 0票数 12

我开始使用PetaPOCO和Dapper,它们都有自己的局限性。但恰恰相反,它们比实体框架快得多,我倾向于放弃它的局限性。

我的问题是:是否有任何ORM可以让我们具体定义一对多、多对一和多对多关系?Dapper.Net和PetaPOCO都实现了类似黑客的方式来伪造这些关系,而且当你可能有5-6个连接时,它们甚至不能很好地扩展。如果没有一个微ORM可以让我们处理它,那么我的第二个问题是,我是否应该放弃这些微ORM在定义关系方面不是那么好的事实,并为我将执行的每一种类型的查询创建一个新的POCO实体,其中包括这些类型的多连接?这个可以很好的扩展吗?

我希望我的问题清楚了。如果没有,请让我知道。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-11 15:39:55

我通常遵循以下步骤。

  1. I创建视图模型的方式代表了我想要在视图中显示的确切数据和格式。
  2. I通过PetaPoco直接从数据库查询到我的视图模型。

在我的分支中,我有一个

T SingleInto<T>(T instance, string sql, params object[] args);

方法,该方法接受现有对象,并可以将列直接映射到名称匹配的对象上。这在这个场景中工作得很好。

如果需要,可以在此处找到我的分支。https://github.com/schotime/petapoco/

票数 7
EN

Stack Overflow用户

发布于 2012-04-11 02:55:01

当你可能有5-6个连接时,它们甚至不能很好地扩展

是的,它们不需要,但这是一件好事,因为当您要构建的系统开始变得复杂时,您可以自由地执行您想要的连接,而不会造成性能损失或令人头疼。

是的,我怀念我不需要用Linq2SQL编写所有这些连接的时候,但后来我创建了一个简单的工具来编写通用连接,这样我就可以获得任何实体的基本SQL,然后我就可以从那里构建。

示例:

代码语言:javascript
复制
[TableName("Product")]
[PrimaryKey("ProductID")]
[ExplicitColumns]
public class Product {
    [PetaPoco.Column("ProductID")]
    public int ProductID { get; set; }

    [PetaPoco.Column("Name")]
    [Display(Name = "Name")]
    [Required]
    [StringLength(50)]
    public String Name { get; set; }

            ...
            ...

    [PetaPoco.Column("ProductTypeID")]
    [Display(Name = "ProductType")]
    public int ProductTypeID { get; set; }

    [ResultColumn]
    public string ProductType { get; set; }

            ...
            ...


    public static Product SingleOrDefault(int id) {
        var sql = BaseQuery();
        sql.Append("WHERE Product.ProductID = @0", id);
        return DbHelper.CurrentDb().SingleOrDefault<Product>(sql);
    }
    public static PetaPoco.Sql BaseQuery(int TopN = 0) {
        var sql = PetaPoco.Sql.Builder;
        sql.AppendSelectTop(TopN);
        sql.Append("Product.*, ProductType.Name as ProductType");
        sql.Append("FROM Product");
        sql.Append("    INNER JOIN ProductType ON Product.ProductoTypeID = ProductType.ProductTypeID");
        return sql;
    }
票数 2
EN

Stack Overflow用户

发布于 2016-06-07 00:00:14

QueryFirst在这方面会有帮助吗?您可以获得micro的速度,并增加了每个错误-编译-时间-错误的舒适性,以及对查询和输出的智能感知。在SQL中定义您的连接是上帝的意图。如果输入连接条件真的很困扰您,那么DBForge可能就是答案,而且因为您使用的是SQL语言,所以这些工具是兼容的,并且您不会被锁定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10086685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档