标签: petapoco

petapoco插入问题

我有一个像这样定义的类:

public class Location
{
    public Location()
    {
        Meetings = new List<Meeting>();
    }

    public virtual int ID { get; private set; }
    public virtual string Name { get; set; }

    public virtual ICollection<Meeting> Meetings { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

而这个数据库表只是带有ID和Name属性的"位置".

其他一些表"会议"有一个外键回到此表.它是超出了我想在这个例子中与之合作的范围,但我认为这是造成PetaPoco失败...

我正在尝试使用PetaPoco将新位置插入数据库,如下所示:

    public int AddLocation(string name)
    {
        var newLocation = new Location{Name = name};
        var db = new PetaPoco.Database(_connectionString);
        db.Insert("locations", "ID", newLocation);
        return newLocation.ID;
    }
Run Code Online (Sandbox Code Playgroud)

它会抛出这样的错误:

{"对象类型System.Collections.Generic.List`1 [[NHRepoTemplate.sampleUsage.sampleModel.Meeting,NHRepoTemplate,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]不存在映射到已知的托管提供者本机类型."}

在我看来,子集合的存在导致PetaPoco无法进行插入,但是......必须有一种方法告诉它"忽略"那个,对吧?

orm petapoco

5
推荐指数
1
解决办法
1984
查看次数

PetaPoco和多对一,一对多和多对多的关系

PetaPoco已经以实验形式引入了多POCO查询(目前).正如他们的博客文章所建议的那样,并且它提供的代码看起来很好,并且当我们每行加载多个POCO时,只要它们不重复记录,所有这些都是一对一的关系.

当至少一方有很多关系时会发生什么?实际上,示例代码是多对一关系数据.

示例代码显然是多对一关系.我没有测试任何PetaPoco代码,但博客文章中提供的代码是做什么的?是否每个Article都有自己的User对象实例,即使某些用户可能是同一个用户,或者他们共享同一个用户对象实例?

那么其他许多关系类型呢?他们如何工作?

relational-database petapoco

5
推荐指数
1
解决办法
4695
查看次数

异常详细信息:System.ArgumentNullException:值不能为null。参数名称:运行时的方法

我有一个项目,其中有我的API类,并且在该项目中,我生成了Database.cs。在我的MVC项目中,我已经修改了API。Uppon运行该应用程序时,我收到以下错误消息,由于我无法理解为什么收到此错误消息,因此任何人都可以提供帮助。

http://www.garethelms.org/2011/05/help-getting-started-with-petapoco/#comment-69,我发现自安装petaPOCo以来,所有的GetSetMethod()都是GetSetMethod(true)。 。

值不能为空。参数名称:meth描述:当前Web请求执行期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.ArgumentNullException:值不能为null。参数名称:meth

源错误:

第1990行:}第1991行:第1992行:il.Emit(OpCodes.Callvirt,pc.PropertyInfo.GetSetMethod(true)); // poco Line 1993:Handled = true;1994行:}

源文件:C:\ Dev \ MyProjectTest \ Code \ API \ Models \ PetaPoco.cs行:1992

堆栈跟踪:

[ArgumentNullException: Value cannot be null. Parameter name: meth]
System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, MethodInfo meth) +9492330 PetaPoco.PocoData.GetFactory(String sql, String connString, Boolean ForceDateTimesToUtc, Int32 firstColumn, Int32 countColumns, IDataReader r) in C:\Dev\MyProjectTest\Code\API\Models\PetaPoco.cs:1992
PetaPoco.d__71.MoveNext() in C:\Dev\MyProjectTest\Code\API\Models\PetaPoco.cs:765
System.Collections.Generic.List
1..ctor(IEnumerable1 collection) +327 System.Linq.Enumerable.ToList(IEnumerable1 source) +58
PetaPoco.Database.Fetch(String sql, Object[] args) in C:\Dev\MyProjectTest\Code\API\Models\PetaPoco.cs:601
PecaTest.NewProject.API.Customer.LoadSortedByName() in C:\Dev\MyProjectTest\Code\API\Customer.cs:68
PecaTest.NewProject.MvcUI.Models.CustomerListModel..ctor() in C:\Dev\MyProjectTest\Code\MvcUI\Models\CustomerListModel.cs:14 …

petapoco

5
推荐指数
2
解决办法
7403
查看次数

PETAPOCO - 无效的对象名称

我正在使用CTE与PetaPOCO并获得一个奇怪的错误
SQL Exception: Invalid Object Name PayTransactionForRollingVacationAverage,该错误引用了数据应该映射到的模型.

代码如下.

public IEnumerable<PayTransactionForRollingVacationAverage> GetPayTransactionForRollingVacationAverage(DateTime payEndingDate)
    {
        PointsNorth.PetaPoco.Sql sql = new PointsNorth.PetaPoco.Sql();
        sql.Append(@"
            ;with HolidayWeeks as
            (
                Select Distinct EmployeeId, PayEndDate, 'Y' as HolidayWeek
                  from PayTransactions
                 where PayEndDate = @payEndingDate
                   and LaborCode in ('251', '249')
            )", new { payEndingDate });

        sql.Append(@"
            Select 
                PT.EmployeeId, 
                PT.PayEndDate, 
                J.JobClass, 
                PayCodes.AverageRateCode,
                PT.RegularHours, 
                PT.RegularRate, 
                PT.RegularAmount                    
              from PayTransactions PT
                Left Outer Join PayCodes on PayCodes.PayCodeCode = PT.LaborCode
                Left Outer Join HolidayWeeks as H on H.PayEndDate = PT.PayEndDate and H.EmployeeId = …
Run Code Online (Sandbox Code Playgroud)

common-table-expression petapoco

5
推荐指数
2
解决办法
2120
查看次数

PetaPoco.Database实现了IDisposable,那么为什么大多数示例都没有'using'语句?

PetaPoco.Database对象实现了IDisposable,但我很少看到包含using语句的代码示例(包括在PetaPoco 自己的网站上),如下所示:

using (var db = new Database("MyConnectionString"))
{
    // Do database stuff
}
Run Code Online (Sandbox Code Playgroud)

我经常看到:

var db = new Database("MyConnectionString");
// Do database stuff
// I never see .Dispose() called.
Run Code Online (Sandbox Code Playgroud)

PetaPoco.Database对象应该如何实际交付?

.net c# dispose idisposable petapoco

5
推荐指数
1
解决办法
898
查看次数

PetaPoco +工作单元+存储库模式

下面的代码似乎使用这个:

var unitOfWorkProvider = new PetaPocoUnitOfWorkProvider();
var repository = new FakeRepository();
var fake = new Fake
{     
    // etc.
};

using (var uow = unitOfWorkProvider.GetUnitOfWork("BlaConnectionString"))
{
    repository.Insert(uow, fake);
    uow.Commit();
}
Run Code Online (Sandbox Code Playgroud)

最终可能会进入服务层.我将不胜感激任何改进此代码的反馈.

public interface IUnitOfWork : IDisposable
{
    void Commit();
    Database Database { get; }
}

public interface IUnitOfWorkProvider
{
    IUnitOfWork GetUnitOfWork(string connectionString);
}

public class PetaPocoUnitOfWorkProvider : IUnitOfWorkProvider
{
    public IUnitOfWork GetUnitOfWork(string connectionString)
    {
        return new PetaPocoUnitOfWork(connectionString);
    }
}

public interface IRepository<T>
{
    void Insert(IUnitOfWork unitOfWork, T entity);
    void Update(IUnitOfWork …
Run Code Online (Sandbox Code Playgroud)

c# repository unit-of-work petapoco

5
推荐指数
1
解决办法
1828
查看次数

NPoco/PetaPoco Fetch()获取所有数据然后过滤客户端是否正常?

我注意到 NPoco(或 PetaPoco)的工作方式存在巨大差异,具体取决于您使用 LINQ 时调用的函数。

例如,比较 Fetch() 和 Query(),两者似乎都做同样的事情:

AFetch<EntryImage>().Where(t => t.EntryType == type && t.EntryID == entryID);

Query<EntryImage>().Where(t => t.EntryType == type && t.EntryID == entryID);

A返回表中的每一行(10,000+),然后过滤客户端。

B仅返回我期望的一行。

我发现这种行为非常危险——很容易在晚上不注意的情况下编写出性能非常糟糕的代码。这是预期的行为吗?如果这是正常行为,有什么方法可以获取以这种方式工作的方法列表,以便我可以尽可能避免使用它们?

linq petapoco npoco

5
推荐指数
1
解决办法
5488
查看次数

PostgreSQL:42883运算符不存在:没有时区的时间戳=文本

我正在使用Npgsql 3.0.3.0和PetaPoco最新版本。

当我运行此命令时:

var dateCreated = DateTime.Now; // just an example
var sql = new Sql("WHERE date_created = @0", dateCreated.ToString("yyyy-MM-dd HH:00:00"));
var category = db.SingleOrDefault<Category>(sql);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Npgsql.NpgsqlException 42883:操作符不存在:没有时区的时间戳=文本

我知道错误消息是说我正在尝试将时间戳记(日期)与文本进行比较,但是对我来说,将它们进行比较是完全有效的,因为我希望构建以下SQL语句:

SELECT * FROM category WHERE date_created = '2017-02-03 15:00:00'
Run Code Online (Sandbox Code Playgroud)

出于性能原因,我真的不想将数据库列转换为文本。

c# postgresql npgsql petapoco

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

如何使用Peta Poco将自动递增的ID设置为另一列

我使用C#,SQL Server和PetaPoco,它们ID默认情况下会自动递增。我只想知道是否可以将此自动递增的id设置为另一列。

我还有2列需要设置ID的确切值。是否可以在SQL CREATE TABLE语句中执行此操作,或者在执行此操作之前或之后执行某些挂钩操作ExecuteNonQuery?如果可能的话,我不想创建视图或触发器。

c# sql-server petapoco

5
推荐指数
1
解决办法
63
查看次数

PetaPoco - 如何关闭自动增量?

我在尝试插入时遇到了这个错误:

无法将值NULL插入列'Id'

事实证明,PetaPoco默认假设Id列是自动递增的,所以即使你提供了一个值,它也会尝试插入null.我在这里找到了一个问题的错误票:https://dnntracker.atlassian.net/browse/DNN-23217.

我正在使用PetaPoco的T4模板来生成我的数据库类.我创建了一个部分类,应用了数据注释来禁用自动增量:

[PrimaryKey("Id", autoIncrement = false)]
public partial class Blah : DatabaseDB.Record<Database.Blah>
{
}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有效果.当我指定一个整数时,PetaPoco仍在尝试为Id列插入null.

c# petapoco micro-orm

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