使用PetaPoco,如何使用类型化参数调用存储过程?在c#我这样做:
cmd.Parameters.Add("@email", SqlDbType.NVarChar).Value = email;
Run Code Online (Sandbox Code Playgroud) 以下是情况的示意图:
WEBSERVER <----> MIDDLEWARE SERVER <---->数据库
Web服务器与Oracle数据库实际分离.
我们想要做的是在Web应用程序的前端使用ASP.Net Web API,使用JQuery/KnockoutJS在新的单页应用程序中集成数据的快速绑定.因此,我们需要从数据库中的数据中使用JSON API来使用JQuery进行访问.
我们想用PetaPoco与数据库交谈.
但是,WEB API项目必须在中间件服务器上运行才能从数据库中获取数据.但是当然我们永远不能在前端使用JQuery访问WEB API.
我正在考虑在Web服务器上设置一个WEB API,它使用不同的技术连接到中间件服务器,可能就像我们现在做的那样普通的旧WCF.然而,这似乎是一种矫枉过正.
有人对如何改进这种架构有一些见解吗?我确定有人在类似的环境中使用WEB API设置了SPA应用程序.
architecture petapoco asp.net-web-api knockout.js single-page-application
我为此感到高兴:
//用peta poco插入记录
var a = new Article();
a.title="My new article";
a.content="PetaPoco was here";
a.date_created=DateTime.UtcNow;
db.Insert(a);
Run Code Online (Sandbox Code Playgroud)
我对此感到分心:
//用dapper插入记录
var a = new Article();
a.title="My new article";
a.content="PetaPoco was here";
a.date_created=DateTime.UtcNow;
string articleQuery= "INSERT INTO Article VALUES (@Title, @Content, @Date)";
connection.Execute(articleQuery, new { Title = a.Title, Content = a.Content, Date = a.Date });
Run Code Online (Sandbox Code Playgroud)
我是dapper和peta poco的新手.可能是我没有找到更多的小巧玲珑,但我真的不喜欢我必须插入的方式.Peta poco似乎非常有意义.
能不能用这种方式做事吗?
我有办法访问C#类属性吗?
例如,如果我有以下类:
...
[TableName("my_table_name")]
public class MyClass
{
...
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
MyClass.Attribute.TableName => my_table_name
Run Code Online (Sandbox Code Playgroud)
谢谢!
在PetaPoco 的主页中提到 PetaPoco 的 SQL Builder(Sql 对象)可以防止 SQL 注入。但是 Query(string query,parameters) 方法可以防止 SQL 注入吗?
SQL 生成器是安全的:
var id = 123;
var a = db.Query<article>(PetaPoco.Sql.Builder
.Append("SELECT * FROM articles")
.Append("WHERE article_id=@0", id)
);
Run Code Online (Sandbox Code Playgroud)
但是像这样传递参数的字符串查询安全吗?
var id = 123;
var a = db.Query<article>("SELECT * FROM articles WHERE article_id=@0", id);
Run Code Online (Sandbox Code Playgroud) 执行Insert时,变量id作为对象返回.但是在我的数据库中它是一个int而在我的POCO中它是一个int但是当调用ExecuteScalar返回@@ IDENTITY的方法时,它返回数字7作为对象,但调试器认为它是一个小数.
因此,当我这样做int newID = (int)db.Insert(...)时抛出一个
InvalidCastException
Run Code Online (Sandbox Code Playgroud)
这是一个框架错误还是PetaPoco错误?
我有一个 senario,用户想要选择他的性别,这不是必填字段。在我的 ui 中,性别列在下拉列表中,其中有两个选项Male和Female ,并有一个可选标签Gender。但是 Gender 是我项目中的枚举,因此如果用户没有选择任何性别,则必须在数据库中输入一个空值,但不幸的是,由于某些强制转换异常,我无法做到这一点 任何机构都可以帮助我解决这个问题?
我使用 petapoco 作为我的 orm 所以我的用户实体看起来像这样
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using Helpers;
using PetaPoco;
using StructureMap;
[TableName("User")]
[PrimaryKey("UserId")]
[ExplicitColumns]
public class User
{
[Column("UserId")]
public int Id { get; set; }
[Column]
[Required]
public Guid Identifier { get; set; }
[Column("UserStatusId")]
[Required]
public UserStatus UserStatus { get; set; }
[Column]
[Required]
public int RoleId { get; set; }
[Column]
public int? …Run Code Online (Sandbox Code Playgroud) 我正在转换使用SQL Server的遗留应用程序,我想将petapoco用于我的数据访问层.
表定义包含许多具有DEFAULT值的列.
我希望我的DAL在插入新记录时处理默认值.
不幸的是,使用该ResultColumn属性不是解决方案,因为当我使用UPDATE和INSERT时会丢弃该列.DEFAULT值与读取计算的字段不完全相同.
有办法处理这个吗?
我有一个问题,使用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) 我想执行一行 SQL,如下所示:
conn.Open();
var db = new PetaPoco.Database(conn);
var sql = "INSERT INTO FOO (name) VALUES ( 'foo@bar.com')";
var response = db.Execute(sql);
Run Code Online (Sandbox Code Playgroud)
问题是 PetaPoco 认为 @bar 是一个参数。有没有办法告诉它不要特殊对待任何@?我超级蹩脚的解决方法是将“@”替换为“at”。我带着这种耻辱生活。
petapoco ×10
c# ×5
.net ×3
architecture ×1
automapper ×1
dapper ×1
default ×1
knockout.js ×1
mysql ×1
npoco ×1
orm ×1
sql-server ×1
t-sql ×1