2016-03-24 1 views
5

Я играл с Dapper, пытаясь понять, является ли это хорошей альтернативой весу для Entity Framework. До сих пор я был впечатлен его способностью быстро вытащить сущность <model> из БД и получить ее в IEnumerable модели или просто создать один экземпляр модели. Очень гладкий.Может ли Dapper использоваться для обновления и вставки моделей?

Но то, что я не вижу, - это простой способ обновить эту модель до db.

Пример:

public class Dog 
{ 
    public Guid Id { get; set; } 
    public int? Age { get; set; } 
    public string Name { get; set; } 
    public float? Weight { get; set; } 
} 

Мы можем легко создать IEnumerable собаки следующим образом:

IEnumerable<Dog> dogs = connection.Query<Dog>("SELECT * FROM Dog") 

Или, для одного экземпляра:

Dog dog = connection.Query<Dog>("SELECT * FROM Dog WHERE DogId = @dogid") 

Это все прекрасно работает. Но теперь, если мы вносим изменения в «собаку» (скажем, просто изменяем ее вес), есть ли пятно, быстрый и простой способ вернуть этот объект в базу данных без необходимости выполнять ручной запрос UPDATE, перечисляя каждое поле ?

Спасибо!

+1

Кажется, что прохождение '' List следует [вставить несколько элементов] (http://stackoverflow.com/a/6500834/69809)? Btw придерживается параметризованных запросов ('SELECT * FROM Dog WHERE DogId = @ DogId'), если вам не нравятся атаки на SQL-инъекции. – Groo

+0

Как будет работать этот синтаксис? При взгляде на ReadMe на GitHub я не вижу примера этого. https://github.com/StackExchange/dapper-dot-net –

+0

Предположительно, как ответ, который я связал с: 'connection.Execute (@" update Dog set Name = @ Name, Age = @ Age ", list);'? – Groo

ответ

6

Вы можете использовать SqlMapperExtensions класс от Dapper.Contrib.Extensions:

using Dapper; 
using Dapper.Contrib.Extensions; 

// don't forget the using since Update is an extension method 

Dog entity; // you got it from somewhere 
entity.Name = "fancy new dog name"; 
connection.Update(entity); 

для того, чтобы это работало вам нужно добавить [Key] аннотацию к вашему идентификатору. должен выглядеть примерно так:

using System.ComponentModel.DataAnnotations; 

public class Dog 
{ 
    [Key] 
    public long Id { get; set; } 
    public int? Age { get; set; } 
    public string Name { get; set; } 
    public float? Weight { get; set; } 
} 
+0

Хорошо! Это гораздо больше, на что я надеялся. Пройдет какое-то время, прежде чем я смогу проверить это, но после того, как я это сделаю, и когда я его заработаю, я отмечу это как ответ. –

6

Dapper - это Micro-Orm, имеющий характеристики, являющиеся простыми и быстрыми. Поведение, которое вы описываете, в большей степени связано с полномасштабной ORM, которая подразумевает наличие какой-либо концепции сеанса сеанса, сопоставления и генерации запросов (с надежными драйверами для разных SQL-вкусов). Это, безусловно, не дух Dapper, что в любом случае сделать процесс обновления/вставки easyer, что простой ado.net, принимая объект POCO в качестве параметров запроса, а именно:

.Execute("update mydogs set [email protected] where [email protected]",dog); 
+0

Хорошо, это имеет смысл. Пара вопросов. Как (в) Возраст и (at) Id заполнены? Они заполняются автоматически «собакой» в конце запроса? (Я не могу использовать знак AT в этом комментарии или переполнение стека, думая, что я пытаюсь уведомить пользователя) –

+0

Да параметр заселен, взяв из значения свойства «собака» instyance, с соответствующими именами –

 Смежные вопросы

  • Нет связанных вопросов^_^