标签: petapoco

56
推荐指数
4
解决办法
1万
查看次数

如何在PetaPoco中使用SQL WHERE IN构造?

我有一个名为Tags(Id,Name)的数据库表,我想从中选择名称与列表中的名称匹配的表.在SQL中我会使用类似的东西:

Select * from Tags Where Name In ('Name1', 'Name2', 'xxx...)
Run Code Online (Sandbox Code Playgroud)

但是现在在ASP.Net MVC3项目中使用PetaPoco,我很难搞清楚如何正确地完成它.到目前为止,我已经尝试过:

var tagsToFind = new string[] { "SqlServer", "IIS" };
var sql = PetaPoco.Sql.Builder.Select("*").From("Tags").Where("Name in (@0)", tagsToFind);
var result = db.Query<Tag>(sql);
Run Code Online (Sandbox Code Playgroud)

这导致以下SQL,其中使用tagsToFind列表中的第一个名称来匹配表数据而不是所有表名数据.

SELECT * FROM Tags WHERE (Name in (@0)) -> @0 [String] = "SqlServer"
Run Code Online (Sandbox Code Playgroud)

这有点令人沮丧,知道这可能不是那么难......任何帮助都表示赞赏!

更新: 我发现它可以用另一种方式完成

var sql = PetaPoco.Sql.Builder.Append("Select * from tags Where Name IN (@0", tagNames[0]);
foreach (string tagName in tagNames.Where(x => x != tagNames[0])) {
    sql.Append(", @0", tagName);
} …
Run Code Online (Sandbox Code Playgroud)

orm petapoco npoco

32
推荐指数
3
解决办法
2万
查看次数

PetaPoco:如何使用SQL Like关键字(WHERE Name LIKE'%@ 0%')

这个查询的正确语法是什么?

var l=db.Fetch<article>("SELECT * FROM articles WHERE title LIKE '%@0%'", 'something');
Run Code Online (Sandbox Code Playgroud)

或者我应该使用CHARINDEX

petapoco

22
推荐指数
3
解决办法
6477
查看次数

使用PetaPoco中的参数调用存储过程

我希望能够在PetaPoco中调用带有命名参数的存储过程.

为了调用执行搜索/获取的存储过程:

我可以这样做:

return db.Fetch<Customer>("EXEC SP_FindCust",
new SqlParameter("@first_name", fName),
new SqlParameter("@last_name", lName),
new SqlParameter("@dob", dob));
Run Code Online (Sandbox Code Playgroud)

另外,如何调用插入的存储过程?

return db.Execute("EXEC InsertCust @CustID = 1, @CustName = AAA")
Run Code Online (Sandbox Code Playgroud)

谢谢,Nac

sql petapoco

20
推荐指数
1
解决办法
2万
查看次数

使用Petapoco批量插入/更新

我正在使用该Save()方法来插入或更新记录,但我想让它只执行一次数据库命令来执行批量插入和批量更新.我该怎么做呢?

petapoco

19
推荐指数
4
解决办法
2万
查看次数

PetaPoco会处理枚举吗?

我正在尝试使用PetaPoco将表转换为POCO.

在我的表中,我有一个名为的列TheEnum.此列中的值是表示以下枚举的字符串:

public enum MyEnum
{
    Fred,
    Wilma
}
Run Code Online (Sandbox Code Playgroud)

当PetaPoco尝试将字符串"Fred"转换为MyEnum值时会发出ch咽声.

它在GetConverter方法中执行此操作,在行中:

Convert.ChangeType( src, dstType, null );
Run Code Online (Sandbox Code Playgroud)

这里src是"弗雷德"(a string),而且dstTypetypeof(MyEnum).

一个例外是InvalidCastException,说Invalid cast from 'System.String' to 'MyEnum'

我错过了什么吗?我需要先注册一些东西吗?

通过在GetConverter方法中添加以下内容,我解决了这个问题:

if (dstType.IsEnum && srcType == typeof(string))
{
  converter = delegate( object src )
            {
                return Enum.Parse( dstType, (string)src ) ;
            } ;
}
Run Code Online (Sandbox Code Playgroud)

显然,我不想在每一行都运行这个委托,因为它会大大减慢速度.我可以将这个枚举及其值注册到字典中以加快速度,但在我看来,这样的东西可能已经存在于产品中.

所以,我的问题是,我是否需要做一些特殊的事情来注册PetaPoco的枚举?

2012年2月23日更新

我刚刚提交了一个补丁,但还没有被提入.如果您想使用它,请查看补丁并合并到您自己的代码中,或者从此处获取代码.

orm petapoco

18
推荐指数
3
解决办法
4640
查看次数

如何使用petapoco创建DAL

我需要使用petapoco创建DAL和存储库.出现的困难是,我不知道它如何管理它的连接.

如果我使用的是dapper,我知道连接过程是如何流动的,因为我控制它.我不知道用petapoco创建DAL的最佳做法是什么.

 public class UserRepository
    {
        public IEnumerable<User> All()
        {
            var db = new PetaPoco.Database("Sqlite_Connection");//this line
            var s = db.Query<User>("SELECT * FROM Users");
            return s.ToList();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想将var db = new PetaPoco.Database("Sqlite_Connection");//this line 我的DALHelper类作为静态属性放置,但我担心可伸缩性

petapoco

14
推荐指数
1
解决办法
4462
查看次数

使用PetaPoco执行存储过程

我有一个存储过程返回一个表值.

这是我的存储过程:

PROCEDURE [GetPermitPendingApproval] 
    @permitYear int = NULL, 
AS
BEGIN
        SELECT [p].[ID]
          ,[p].[PermitNumber] 
          ,[p].[PermitTypeID]
          ,[p].[ApplicationDate]
          ,[u].[FirstName]
          ,[u].[MI]
          ,[u].[LastName]
          ,[u].[Suffix]
          ,[u].[ProfessionalTitle]
          ,[u].[WorksFor] 
      FROM [SciCollUser] u 
            INNER JOIN UserPermit up ON up.[UserID] = u.[ID] 
            INNER JOIN Permit p ON p.[ID] = [up].[PermitID] 
     WHERE (@permitYear IS NULL OR p.PermitYear = @permitYear) 
    ORDER BY [p].[ApplicationDate] ASC;
END
Run Code Online (Sandbox Code Playgroud)

我不确定我们是否有这样的方法来使用PetaPoco执行存储过程并将返回的数据作为表格获取?请帮忙!

通常我可以用跟随脚本执行存储过程,但这不是我想要的方式.

db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");
Run Code Online (Sandbox Code Playgroud)

stored-procedures petapoco

13
推荐指数
4
解决办法
1万
查看次数

如何检查var的null值?

我正在使用PetaPoco Micro-ORM和C#4.0.

下面的代码从数据库中检索一行:

var result = db.SingleOrDefault<TdUsers>(getUserQuery);
Run Code Online (Sandbox Code Playgroud)

我想检查结果是否包含任何行,以及是否为null.做这个的最好方式是什么?

.net c# .net-4.0 c#-4.0 petapoco

12
推荐指数
2
解决办法
6万
查看次数

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

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

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

我希望我对自己的问题很清楚.如果没有,请告诉我.

c# orm massive dapper petapoco

11
推荐指数
1
解决办法
5194
查看次数

标签 统计

petapoco ×10

orm ×3

c# ×2

dapper ×2

massive ×2

.net ×1

.net-4.0 ×1

c#-4.0 ×1

java ×1

npoco ×1

sql ×1

stored-procedures ×1

subsonic ×1