我有一个名为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) table在我的数据库中给出以下内容(PostgreSQL)
CREATE TABLE produkt (
id SERIAL NOT NULL,
name VARCHAR(50),
created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT timezone('utc'::text, now())
);
ALTER TABLE produkt ADD CONSTRAINT produkt_pkey PRIMARY KEY (id);
Run Code Online (Sandbox Code Playgroud)
我想使用NPoco来访问使用此poco的数据
[TableName("produkt"), PrimaryKey("id", AutoIncrement = true)]
public class Product
{
[Column("id")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
[Column("created_at")]
public DateTime CreatedAt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我打电话的时候
var product = new Product
{
Name = "My new Product"
};
Database.Insert(product); // …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完成吗?
我最近开始与asp.net核心mvc一起进入新的.net核心。我遇到了一些问题,但我能够自己解决大多数问题。真正令我难过的是使用NPoco。
您应该如何创建数据库实例?
该文档的内容如下:
IDatabase db = new Database("connStringName");
List<User> users = db.Fetch<User>("select userId, email from users");
Run Code Online (Sandbox Code Playgroud)
对于DNXCORE50,这是不正确的,因为DNCORE50已排除此构造函数
我也尝试过这样:
IDatabase _db = new Database(new SqlConnection(ConnStr));
_db.Single<string>("SELECT Username FROM dbo.Member");
Run Code Online (Sandbox Code Playgroud)
当这段代码运行时,我得到一个'NullReferenceException'
有谁知道如何使NPoco正常工作?
npoco asp.net-core-mvc .net-core asp.net-core asp.net-core-1.0
是否可以使用NPoco映射具有嵌套类和集合类的复杂类?我已经看了一下文档但是我不能100%清楚我是否可以用一个查询映射到这个类.
例如,给定这些类:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public List<Car> Cars { get; set; }
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
public class Car
{
public string Make { get; set; }
public string Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
是否可以映射用户并使用一个查询填充Address属性和Cars属性?
我已经看到我可以做一个OneToMany Fetch,并且它也可以映射一个属性,这是一个类,但我不确定我是否可以使用一个fetch映射一个具有这两个类的类.
我有一个这样的课:
public class AuthEntity
{
public int Id { get; set; }
public AuthResource Resource { get; set; }
public int ActionId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
AuthResource在哪里:
public class AuthResource
{
public long ResourceId { get; private set; }
public int ResourceType { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
存储数据的表具有以下字段:
我可以很好地阅读AuthEntity(包括Resource属性),但我不知道如何插入AuthEntity记录.NPoco说没有资源字段.如何将嵌套对象字段映射到表字段?
谢谢
我注意到 NPoco(或 PetaPoco)的工作方式存在巨大差异,具体取决于您使用 LINQ 时调用的函数。
例如,比较 Fetch() 和 Query(),两者似乎都做同样的事情:
A:Fetch<EntryImage>().Where(t => t.EntryType == type && t.EntryID == entryID);
乙:Query<EntryImage>().Where(t => t.EntryType == type && t.EntryID == entryID);
A返回表中的每一行(10,000+),然后过滤客户端。
B仅返回我期望的一行。
我发现这种行为非常危险——很容易在晚上不注意的情况下编写出性能非常糟糕的代码。这是预期的行为吗?如果这是正常行为,有什么方法可以获取以这种方式工作的方法列表,以便我可以尽可能避免使用它们?
使用 NPoco,我试图弄清楚如何更新一个对象的多列(但不是全部)。这工作...
db.Update(item, new[] { "status", "tracking_number", "updated_at" });
Run Code Online (Sandbox Code Playgroud)
...但我正在尝试使用下面的符号,以便我可以使用对象的属性名称而不是数据库列名称。
int Update<T>(T poco, Expression<Func<T, object>> fields);
Run Code Online (Sandbox Code Playgroud)
如何使用上述语法列出多于一列?这将更新一列,但我假设我可以列出多个列,但我无法弄清楚符号。
db.Update(item, i => i.Status);
Run Code Online (Sandbox Code Playgroud) 我刚开始在我的一个项目中使用PetaPoco/NPoco并且不得不说它摇滚,但似乎该库无法生成DDL并创建基于Poco的表.我知道OrmLite可以做到这一点.
是否有一种方法/解决方法可用于例如装饰poco,然后根据属性生成DBMS特定的表脚本?例如Oracle,MSSql等
谢谢
这是我第一次尝试使用 NPOCO,我正在尝试读取 MS SQLEXPRESS 数据库
NPOCO“2.2.49”来自 NuGet、SQLEXPRESS 2008 R2、VS 2013、.NET 4.5
连接字符串是
<connectionStrings>
<add name="TrackTime.Properties.Settings.connectionDB" connectionString="Data Source=ame-PC\SQLEXPRESS;Initial Catalog=TrackTime;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
代码是
db = new Database("TrackTime.Properties.Settings.connectionDB");
var tracks = db.Fetch<trackdatum>();
// List<trackdatum> tracks = db.Fetch<trackdatum>();
trackdatum class
using NPoco;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TrackTime
{
[TableName("trackdata")]
[PrimaryKey("trackdata_id")]
[ExplicitColumns]
public partial class trackdatum
{
[Column]
public string trackdata_customer { get; set; }
[Column]
public DateTime trackdata_date { get; set; }
[Column]
public DateTime …Run Code Online (Sandbox Code Playgroud) 我有一个问题,使用nPoco的'Insert of T'方法,MySQL表定义如下:
CREATE TABLE `TestTable` (
`Id` INT(11) NOT NULL,
`StatusEnum` INT(11) NOT NULL,
PRIMARY KEY (`Id`)
)
Run Code Online (Sandbox Code Playgroud)
Database.Entity定义为......
[TableName("operations.TestTable")]
[PrimaryKey("Id")]
[ExplicitColumns]
public class TestTable
{
[Column]
public int Id { get; set; }
[Column]
public Status StatusEnum { get; set; } = Status.Default;
}
Run Code Online (Sandbox Code Playgroud)
代码段:
// this works
var foo = new TestTable { Id = 123 };
database.Execute(
"insert into operations.TestTable (Id, StatusEnum) values (@0, @1)",
foo.Id,
foo.StatusEnum);
// this throws "Field 'Id' doesn't have a default …Run Code Online (Sandbox Code Playgroud)