标签: micro-orm

如何使用 dapper 将 DbGeography 插入 SQL Server

我已经创建了模型 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 成员的对象? …

c# sql-server geospatial dapper micro-orm

6
推荐指数
1
解决办法
2272
查看次数

微软有微型ORM吗?

微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)

.net orm dapper micro-orm

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

使用dapper查询空间数据

我发现了一些相关问题,但作者放弃了并继续使用存储过程来进行"映射".

这实际上是一个延续的问题在这里

模型

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>很难找到扩展支持的文档

c# sql-server spatial dapper micro-orm

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

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
查看次数

应该使用"使用"声明吗?

我见过有人在做的例子:

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)

c# dapper micro-orm

4
推荐指数
2
解决办法
2603
查看次数

使用 Dapper 的内连接获取数据

我正在一个项目上进行数据库操作并开发 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)

c# orm dapper micro-orm

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

Simple.Data Micro ORM与Visual Studio中的Intellisense(动态)

我决定使用Simple.Data Micro ORM,因为它简单易用,可以保存我编写相当多的代码,而且甚至不需要因为动态而创建对象!

问题是我在Visual Studio中失去了Intellisense支持,每次编写代码时我都不喜欢看行名.有没有办法利用intellisense和动态,即使是以不完整的方式?

所以他们质疑的是,是否有可能以这种或那种方式对动态进行智能感知?

c# visual-studio simple.data micro-orm

3
推荐指数
1
解决办法
1760
查看次数

有没有像 Python 的 micro ORM 这样的 Dapper?

我知道 python 有多个 ORM,但我喜欢 Dapper 的想法——一个简单的对象映射器。我用谷歌搜索但找不到任何像 Python 的 ORM 这样的 Dapper。有没有像 python 的 micro-ORM 这样的小巧玲珑的工具?

python mysql orm micro-orm

3
推荐指数
2
解决办法
2664
查看次数

是否有相当于Dapper.Net和Dapper.Net扩展的"NotMapped"?

我已经开始玩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?

提前致谢.

-亚当

dapper micro-orm

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

dapper.net多重删除问题

我正在尝试从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)

我已成功设法使用多选语句,但这在我使用两个自治参数的意义上略有不同.

c# dapper micro-orm

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

Simple.Data默认生成的查询和性能

我正在考虑在我的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来阻止它.

sql asp.net simple.data micro-orm

0
推荐指数
1
解决办法
605
查看次数

无法使用 Column 属性将属性与使用 AsyncPoco 的列名相关联

我正在使用 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)

但是,我在尝试 …

c# orm async-await micro-orm

0
推荐指数
1
解决办法
800
查看次数