我开始使用PetaPOCO和Dapper,它们都有自己的局限性。但恰恰相反,它们比实体框架快得多,我倾向于放弃它的局限性。
我的问题是:是否有任何ORM可以让我们具体定义一对多、多对一和多对多关系?Dapper.Net和PetaPOCO都实现了类似黑客的方式来伪造这些关系,而且当你可能有5-6个连接时,它们甚至不能很好地扩展。如果没有一个微ORM可以让我们处理它,那么我的第二个问题是,我是否应该放弃这些微ORM在定义关系方面不是那么好的事实,并为我将执行的每一种类型的查询创建一个新的POCO实体,其中包括这些类型的多连接?这个可以很好的扩展吗?
我希望我的问题清楚了。如果没有,请让我知道。
发布于 2012-04-11 15:39:55
我通常遵循以下步骤。
在我的分支中,我有一个
T SingleInto<T>(T instance, string sql, params object[] args);
方法,该方法接受现有对象,并可以将列直接映射到名称匹配的对象上。这在这个场景中工作得很好。
如果需要,可以在此处找到我的分支。https://github.com/schotime/petapoco/
发布于 2012-04-11 02:55:01
当你可能有5-6个连接时,它们甚至不能很好地扩展
是的,它们不需要,但这是一件好事,因为当您要构建的系统开始变得复杂时,您可以自由地执行您想要的连接,而不会造成性能损失或令人头疼。
是的,我怀念我不需要用Linq2SQL编写所有这些连接的时候,但后来我创建了一个简单的工具来编写通用连接,这样我就可以获得任何实体的基本SQL,然后我就可以从那里构建。
示例:
[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;
}发布于 2016-06-07 00:00:14
QueryFirst在这方面会有帮助吗?您可以获得micro的速度,并增加了每个错误-编译-时间-错误的舒适性,以及对查询和输出的智能感知。在SQL中定义您的连接是上帝的意图。如果输入连接条件真的很困扰您,那么DBForge可能就是答案,而且因为您使用的是SQL语言,所以这些工具是兼容的,并且您不会被锁定。
https://stackoverflow.com/questions/10086685
复制相似问题