我已经创建了模型 using System.Data.Entity.Spatial;
public class Store
{
public int Id { get; private set; }
public string Name { get; set; }
public string Address { get; set; }
public DbGeography Location { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
using (SqlConnection conn = SqlHelper.GetOpenConnection())
{
const string sql = "INSERT INTO Stores(Name, Address, Location) " +
"VALUES (@Name, @Address, @Location)";
return conn.Execute(sql, store);
}
Run Code Online (Sandbox Code Playgroud)
我得到了例外 type System.Data.Entity.Spatial.DbGeography cannot be used as a parameter value
我试过寻找插入的方法,这是我能找到的最好的方法,但它试图只插入 1 个参数,我应该怎么做才能插入具有 dbgeography 成员的对象? …
微ORM Dapper可以非常容易地从数据库填充对象,而无需其他实体或类定义.以下是Dapper代码示例.
是否有相同的Microsoft软件包具有相同的功能?
什么是最接近的Microsoft软件包Dapper?
var stuff = db.Query<stuffclass>("select a,b,c from Foo where a = {0}", x)
Run Code Online (Sandbox Code Playgroud) 我发现了一些相关问题,但作者放弃了并继续使用存储过程来进行"映射".
这实际上是一个延续的问题在这里
public class Store
{
public int Id { get; private set; }
public string Name { get; set; }
public string Address { get; set; }
public DbGeography Location { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
using (SqlConnection conn = SqlHelper.GetOpenConnection())
{
const string sql = "Select * from Stores";
return conn.Query<Store>(sql, new { Tenant_Id = tenantId });
}
Run Code Online (Sandbox Code Playgroud)
Dapper不了解空间数据,正如许多人所说的那样,作者最初并不打算支持供应商特定的实现.但是Query<T>很难找到扩展支持的文档
我在尝试插入时遇到了这个错误:
无法将值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.
我见过有人在做的例子:
IDbConnection db = new MySqlConnection(conn);
var people = db.Query<People>("SELECT * FROM PEOPLE").ToList();
Run Code Online (Sandbox Code Playgroud)
或者上面是一个不好的做法,并且所有查询都应该使用如下语句:
using (var db = new MySqlConnection(conn))
{
var people = db.Query<People>("SELECT * FROM PEOPLE").ToList();
}
Run Code Online (Sandbox Code Playgroud) 我正在一个项目上进行数据库操作并开发 WinForms 应用程序 C#,我正在使用 Dapper 从数据库中获取数据,我陷入了需要使用内部联接检索数据的情况。例如。我有两个表 Authors 和 Book 如下:
public class Authors
{
public int AuthorId { get; set; }
public string AuthorName { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string AuthorId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在在 SQL Server 中,我可以使用以下查询轻松地从中获取数据:
select B.Title,b.Description,b.Price,A.AuthorName from author A inner join …Run Code Online (Sandbox Code Playgroud) 我决定使用Simple.Data Micro ORM,因为它简单易用,可以保存我编写相当多的代码,而且甚至不需要因为动态而创建对象!
问题是我在Visual Studio中失去了Intellisense支持,每次编写代码时我都不喜欢看行名.有没有办法利用intellisense和动态,即使是以不完整的方式?
所以他们质疑的是,是否有可能以这种或那种方式对动态进行智能感知?
我知道 python 有多个 ORM,但我喜欢 Dapper 的想法——一个简单的对象映射器。我用谷歌搜索但找不到任何像 Python 的 ORM 这样的 Dapper。有没有像 python 的 micro-ORM 这样的小巧玲珑的工具?
我已经开始玩Dapper.Net了,到目前为止我真的非常喜欢它 - 但是,我遇到了一个问题.
假设我有一个POCO类:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
}
Run Code Online (Sandbox Code Playgroud)
现在,使用Dapper.Net和Dapper.Net扩展,我想通过这样做简单地从DB加载该数据类型的所有实例:
string connectionString = CloudConfigurationManager.GetSetting("DBConnection");
using (SqlConnection cn = new SqlConnection(connectionString))
{
cn.Open();
IEnumerable<Types.Person> entities = cn.GetList<Types.Person>();
var forceMe = entities.ToList();
}
Run Code Online (Sandbox Code Playgroud)
这在Linq设置中运行良好,但是当它使用强制评估的.ToList()命中行时,它会在FullName上以"无效列名"爆炸.考虑到它可能会尊重NotMapped的Entity Framework DataAnnotations内容,我尝试添加NotMapped属性(在向项目添加EF 5之后).这没用.
所以,问题是,如何告诉Dapper.Net数据库中没有预期的列?这是扩展的问题,试图为它在模型POCO中看到的所有内容映射数据库列吗?我是否需要恢复编写SQL,并明确询问我想要的列,或者是否有办法在列上获得等效的NotMapped?
提前致谢.
-亚当
我正在尝试从ac#class中的两个不同的vairables中删除两个表,但是我收到以下错误消息:
使用多映射API时,如果您具有Id参数名称以外的键,请确保设置splitOn参数:splitOn
通过SQL事件探查器捕获命令时,sql语句执行正常,所以我很难过.
精巧的代码是:
public void DeleteListCode(string listCodeId)
{
using (var block = new TransactionBlock())
{
// Get the code first
const string sql = "SELECT ListCode from ListCodes WHERE id =@listCodeId";
var code = TransactionBlock.Connection.Query<string>(sql, new {listCodeId}, TransactionBlock.Transaction)
.FirstOrDefault();
if (string.IsNullOrEmpty(code)) return;
const string sql2 = "delete from Lists WHERE ListCode = @code " +
"delete from ListCodes where Id = @listCodeId";
TransactionBlock.Connection.Query(sql2, new {listCodeId, code}, TransactionBlock.Transaction);
block.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
我已成功设法使用多选语句,但这在我使用两个自治参数的意义上略有不同.
我正在考虑在我的ASP.NET 4.5网站上使用Simple.Data Micro-ORM.但是,在决定是否使用它之前,我需要知道一些事情.
我们以下面的Join查询为例:
var albums = db.Albums.FindAllByGenreId(1)
.Select(
db.Albums.Title,
db.Albums.Genre.Name);
Run Code Online (Sandbox Code Playgroud)
此查询将被翻译为:
select
[dbo].[Albums].[Title],
[dbo].[Genres].[Name]
from [dbo].[Albums]
LEFT JOIN [dbo].[Genres] ON ([dbo].[Genres].[GenreId] = [dbo].[Albums].[GenreId])
WHERE [dbo].[Albums].[GenreId] = @p1
@p1 (Int32) = 1
Run Code Online (Sandbox Code Playgroud)
我们假设'Genres'表是一个包含数千甚至数百万行的表.我认为在JOIN发生之后过滤数据可能效率非常低,这是Simple.SDate中此查询的转换.
是否更好地过滤Generes表中的数据第一,这意味着先创建一个SELECT语句并使用该过滤表进行JOIN?
提前过滤数据不是更好吗?
此外,是否可以选择使用Simple.Data进行该类型的复杂(在过滤表上的JOIN)查询.
需要你的答案知道是否继续使用Simple.Data,或者使用其他微型ORM来阻止它.
我正在使用 NuGet 包AsyncPoco v1.2,官方PetaPoco的异步分支——“适合你的 POCO 的一个小 ORM东西”。选择的 DBRM 是 Oracle,但这无关紧要。
到目前为止,经典的 PetaPoco 包一直在工作,但我的问题是 AsyncPoco 包没有使用Column属性的值,而是完全忽略它并简单地使用属性名称作为直接列标识符。
例子:
我创建了 Poco
[PrimaryKey("ID_COL", SequenceName = "SCHEMA.SCHEMA_TABLE_SEQ")]
[TableName("SCHEMA.SCHEMA_TABLE")]
public class PocoModel
{
[Column("ID_COL")]
public long Id { get; set; }
[Column("NAME_COL")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我为所需的属性赋值,然后尝试执行 InsertAsync
public async Task InsertPoco(PocoModel model, DbConnection conn)
{
var taskCompletionSource = new TaskCompletionSource<bool>();
using (var database = new AsyncPoco.Database(conn))
{
await database.InsertAsync(model);
taskCompletionSource.TrySetResult(true);
}
await taskCompletionSource.Task;
}
Run Code Online (Sandbox Code Playgroud)
但是,我在尝试 …
micro-orm ×12
c# ×8
dapper ×7
orm ×4
simple.data ×2
sql-server ×2
.net ×1
asp.net ×1
async-await ×1
geospatial ×1
mysql ×1
petapoco ×1
python ×1
spatial ×1
sql ×1