Я начал изучать Даппера совсем недавно. Я тестирую его и умею делать базовый CRUD, а то, что я подразумеваю под базовым, - это работа над классом с этой структурой:
public class Product {
public int Id {get;set;}
public string Name {get;set;}
}
Теперь я искал что-то, что облегчило бы делать вставки и обновления и находило Dapper.Rainbow. Я проверил его и смог использовать его для получения и вставки объектов, как описано выше. Моя проблема в том, что когда Product
имеет свойство навигации, я не могу вставить в это поле. Поэтому, если у меня есть это:
public class Product {
public int Id {get;set;}
public string Name {get;set;}
public ProductCategory Category {get;set;}
}
Я не смогу это сделать:
// connection is a valid and opened connection
var db = TestDatabase.Init(connection , 300);
var newId = db.Products.Insert(newProduct);
по этой причине:
The member Category of type ProductCategory cannot be used as a parameter value
Проблема может быть решена, если я заменил Category
на тип int
(тот же тип данных в базе данных). Однако, если я это сделаю, я не смогу запросить продукт с информацией о его категории, больше, чем просто (категория).
Итак, не прибегая к необработанному Dapper, как я могу вставлять и обновлять, используя класс с навигационным свойством? Я надеялся, что смогу сделать следующее и сказать Dapper.Rainbow игнорировать Category
при вставке или обновлении.
public class Product {
public int Id {get;set;}
public string Name {get;set;}
public ProductCategory Category {get;set;}
public int CategoryId {get;set;} // this will be the same field name in the database
}
Этот сценарий возможен с NHibernate, где у меня может быть прокси-объект Category
и назначить его Product
и сохранить его, и отображение работает отлично. Но я хотел бы использовать Dapper и то, что я изучаю и хочу узнать, как это можно сделать.