我在我目前的项目中使用PetaPoco作为微型ORM,我必须说我喜欢它.然而,我发现自己在使用PetaPoco.Database的简单场景 - 单元测试服务中苦苦挣扎
public class MyService : IMyService
{
private readonly PetaPoco.Database _database;
public MyService(PetaPoco.Database database)
{
_database = database;
}
public void SaveSomething(MyObject myObject)
{
//...custom logic
_database.Save(myObject);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用IoC(Castle.Windsor)在任何需要的地方注入IMyService和PetaPoco.Database.
现在,当我尝试对我的服务进行单元测试时,我无法正确模拟存根PetaPoco.Database以验证是否正确调用了Save方法.我正在使用NUnit和Rhino.Mocks进行单元测试和模拟.
[TestFixture]
public class MyServiceTests
{
private PetaPoco.Database _database;
[SetUp]
public void SetUp()
{
_database = MockRepository.GenerateMock<Database>("");
}
[Test]
public void ShouldProperlySaveSomething()
{
//Arrange
var myObject = new …Run Code Online (Sandbox Code Playgroud) 我有一张包含服务公告的表格.对于这个表我有一个1:1的POCO - 除了它包含一个额外的字段.在我的查询中,这是作者的用户名,该表仅包含作者ID.
我认为我可以[Ignore]在这个字段上添加一个属性,然后能够使用POCO进行插入/更新而不会出现问题?我的问题是,使用该[Ignore]属性,该BrukerNavn字段未填充.而没有属性,它会在插入/更新的一声.
[TableName("tblDriftsmelding")]
[PrimaryKey("DriftID")]
public class Driftsmelding
{
public int DriftID { get; set; }
[Column("tittel")] public string Tittel { get; set; }
public string Tekst { get; set; }
public string HTMLTekst { get; set; }
[Column("gyldigfra")] public DateTime? Fra { get; set; }
[Column("gyldigtil")] public DateTime? Til { get; set; }
[Column("publisert")] public bool Publisert { get; set; }
[Column("CreatedBy")] public int? BrukerID { get; …Run Code Online (Sandbox Code Playgroud) 将记录插入数据库的最快选项是什么:使用以下哪些方法:
Database.Insert(poco) Database.Insert(tableName, pkName, poco)Database.Save(poco)Database.Save(tableName, pkName, poco)出于性能原因,我应该使用哪一个?一个对我来说并不比另一个方便......
谢谢.
我在 C# 应用程序中使用 PetaPoco.Core 4.0.3 来访问 MySql 数据库。
我正在尝试创建一个使用变量的查询,但我不希望 PetaPoco 将它们视为输入参数。这是一个无用的查询,只是为了说明我的意思:
SET @num := 0;
SELECT
@num := @num + 1 AS row_number
FROM
buzz
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,PetaPoco 将 @num 识别为输入参数,并且我收到以下错误:
指定了参数“@num”,但传递的参数都没有具有此 >name 的属性(在“SET @num := 0; SELECT @num;”中)
我还尝试通过加倍@字符来转义它
SET @@num := 0;
SELECT
@@num := @@num + 1 AS row_number
FROM
buzz
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
但后来我收到
必须定义参数“@num”。
有没有一种方法可以在查询中声明和使用变量,而无需 PetaPoco 将它们识别为输入参数?
提前致谢
保罗
我只是以多线程方式测试PetaPoco Transaction ...
我有一个简单的测试用例:
- 简单值对象称之为MediaDevice - 插入记录并将其更新1000次
void TransactionThread(Object object)
{
Database db = (Database) object;
for(int i= 0; i < 1000;i++)
{
Transaction transaction = db.GetTransaction();
MediaDevice device = new MediaDevice();
device.Name = "Name";
device.Brand = "Brand";
db.Insert(device);
device.Name = "Name_Updated";
device.Brand = "Brand_Updated";
db.Update(device);
transaction.Complete();
}
long count = db.ExecuteScalar<long>("SELECT Count(*) FROM MediaDevices");
Console.WriteLine("Number of all records:" + count);
}
Run Code Online (Sandbox Code Playgroud)
我在这两个线程中调用它:[两个线程的单个数据库对象]
void TransactionTest()
{
Database db = GetDatabase();
Thread tThread1 = ... // thread for TransactionTest()
Thread …Run Code Online (Sandbox Code Playgroud) NPoco似乎是一个支持更高级功能的DLL PetaPoco. PetaPoco安装代码生成模板和PetaPoco.cs.Nuget版本PetaPoco是4.0.3.我知道有一些版本(即4.0.12)可以实现其中的一些功能NPoco.
如何一起使用代码生成PetaPoco和最新功能NPoco?
我正在开始一些新项目,我想使用PetaPoco(我之前在其他项目中使用过它)或NPoco.
我知道NPoco是PetaPoco的一个分支(基于v4.x),而PetaPoco现在是v5.x.
但似乎NPoco虽然是PetaPoco +的一些新功能,但代码库现在有点分歧,PetaPoco的变化不能轻易地集成到NPoco和反之亦然.
PetaPoco仍在开发中吗?是否已弃用/处于维护模式?所有未来的发展都将在NPoco完成吗?
我正在尝试使用表达式树和匿名类型来实现以下目标。
假设我有这门课:
class Person
{
public string FirstName {get;set;}
public string MiddleName {get;set;}
public string LastName {get;set;}
public DateTime DateOfBirth {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我希望能够调用以下内容:
string[] names = Foo<Person>(x=> new { x.LastName, x.DateOfBirth });
Run Code Online (Sandbox Code Playgroud)
我希望名称包含 2 个项目:“姓氏”和“出生日期”。
我正在尝试以编译时安全的方式扩展PetaPoco,而不是编写字符串 sql,以便我可以指定要包含在 SQL 中的属性/列的列表,而不是选择所有内容。我有一些相当大的实体,在某些情况下,出于性能原因我不想选择所有列。
是否可以使用PetaPoco动态查询在ASP.net WebAPI中返回Json?
// WebAPI控制器
public class BranchController : ApiController
{
public IEnumerable<dynamic> Get()
{
// Create a PetaPoco database object
var db = new PetaPoco.Database("DefaultConnection");
// Show all Branches
var b = db.Query<dynamic>("SELECT * FROM Branches").ToList();
return b;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
要成为XML可序列化,从IEnumerable继承的类型必须具有Add(System.Object)的实现
我过去使用过PetaPoco,用[Column("{column name")]属性装饰我的对象等等.但是,我正在尝试实现一个"纯"域模型,该模型不了解持久性,因此不了解PetaPoco的属性.
PetaPoco 博客提到有一个IMapper接口("New Mapper API")必须实现才能将对象映射到它们的表而不需要修饰对象的类.但是,博客文章或源代码都没有真正解释IMapper应该执行的实现.
如果我只是想将我的域实体映射到特定的表,主键和列名,我是否需要实现IMapper,我该怎么做?