Dapper Dommel - автоматическое сопоставление соединения запроса
Прошу прощения за мой плохой английский, но вот оно, я использую Dapper с Dapper Dommel для упрощения операций, таких как crud, но в Dommel Github говорится, что он также поддерживает операции соединения, поэтому я пытаюсь реализовать его в своем коде, пока мне удалось вернуть простой объект с помощью Get.
Но когда я пытаюсь использовать его для более сложных операций, таких как соединение, возникает исключение.
В сообщении об ошибке говорится: SqlException: необходимо объявить скалярную переменную "@product_id".
Но в сингле Get
Пакеты: DapperDommelDapper-FluentMap.DommelDapper-FluentMap
GitHub Dommelhttps://github.com/henkmollema/Dommel
Удалось ли кому-то использовать Dapper Dommel для возврата нескольких объектов в запросах соединения с автоматическим отображением?
public class DbContext : IDisposable
{
public SqlConnection Connection { get; private set; }
public DbContext()
{
Connection = new SqlConnection("Server=localhost;Database=BikeStores;Trusted_Connection=True;");
OpenConnection();
}
private bool OpenConnection()
{
try
{
if (Connection.State != System.Data.ConnectionState.Open)
Connection.Open();
return true;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}
public void Dispose() => Connection.Close();
}
Свободная карта Доммеля:
public class ProductMap : DommelEntityMap<Product>
{
public ProductMap()
{
ToTable("production.products");
Map(m => m.Id)
.ToColumn("product_id")
.IsKey()
.IsIdentity();
Map(m => m.Name)
.ToColumn("product_name");
Map(m => m.BrandId)
.ToColumn("brand_id");
Map(p => p.CategoryId)
.ToColumn("category_id");
Map(p => p.ModelYear)
.ToColumn("model_year");
Map(p => p.ListPrice)
.ToColumn("list_price");
}
}
Сопоставление категорий:
public class CategoryMap : DommelEntityMap<Category>
{
public CategoryMap()
{
ToTable("production.categories");
Map(m => m.Id)
.ToColumn("category_id")
.IsKey()
.IsIdentity();
Map(m => m.Name)
.ToColumn("category_name");
}
}
Сопоставления регистров:
public RegisterMappings()
{
FluentMapper.Initialize(config =>
{
config.AddMap(new ProductMap());
config.AddMap(new CategoryMap());
config.ForDommel();
});
}
Модель:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int BrandId { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
public int ModelYear { get; set; }
public decimal ListPrice { get; set; }
}
Просто, что работает:
using (var connect = new DbContext())
{
var product = connect.Connection.Get<Product>(id);
return product;
}
Получить Не работает:
using (var connect = new DbContext())
{
var prod = connect.Connection.Get<Product, Category, Product>(1, (product, category) =>
{
product.Category = category;
return product;
});
return prod;
}