2015-11-02 2 views
1

Я использую Dapper.NET для подключения к базе данных.Вставки с использованием Dapper.NET

До сих пор, я прибегал в руки писать все SQL Мне нужно для вставки и обновления, я нашел этот старый пост от Sam Saffron
Performing Inserts and Updates with Dapper

Однако, это не приводит ни к чему неоспоримым в отношении того, как делать вставки и обновления из объектов POCO, за исключением нескольких ссылок на код, который уже несколько лет.

С тех пор, есть новая небольшая вспомогательная библиотека для автогенерации, что необходимо выскочить?

+2

Посмотрите на [Dapper.Contrib] (https://github.com/StackExchange/dapper-dot-net/tree/master/Dapper.Contrib) –

+1

Также [Dapper-Extensions] (https: // github.com/tmsmith/Dapper-Extensions) –

+0

Спасибо за два предложения, я посмотрю на это. –

ответ

0

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

//Insert one entity 
connection.Insert(new Car { Name = "Volvo" }); 

//Insert a list of entities 
connection.Insert(cars); 

//Update one entity 
connection.Update(new Car() { Id = 1, Name = "Saab" }); 

//Update a list of entities 
connection.Update(cars); 

другие примеры here.

0

Предполагая, что вам нужно вставлять записи/обновления в таблицу с определенной схемой, то вы можете использовать следующий код, используя Чудной, копировать мой собственный код

int recordsAffected = 
      _connection.Execute(@"insert into person.MyPerson(FirstName,EmailPromotion,LastName,MiddleName,NameStyle,PersonType,Suffix,Title) 
                  values (@FirstName,@EmailPromotion,@LastName,@MiddleName,@NameStyle,@PersonType,@Suffix,@Title)", customPersons); 

Важным моментом здесь является customPersons имеет тип List<CustomPerson> с схема такая же, как требуемые параметры в запросе, как показано ниже. До точки же число столбцов в соответствии с требованиями запроса доступны, Щеголеватый будет в состоянии сделать замену значения и выполнить запрос

[ProtoContract] 

[Serializable] 
public class CustomPerson 
{ 
////[ProtoMember(1)] 
////public int BusinessEntityId { get; set; } 

[ProtoMember(2),ProtoIgnore] 
public string PersonType { get; set; } 

[ProtoMember(3)] 
public bool NameStyle { get; set; } 

[ProtoMember(4)] 
public string Title { get; set; } 

[ProtoMember(5)] 
public string FirstName { get; set; } 

[ProtoMember(6)] 
public string MiddleName { get; set; } 

[ProtoMember(7)] 
public string LastName { get; set; } 

[ProtoMember(8)] 
public string Suffix { get; set; } 

[ProtoMember(9)] 
public int EmailPromotion { get; set; } 
} 

Хотя это является внутренним способом Щеголеватого для выполнения DML, в случае, если вы ищу массовую вставку, то SqlBulkCopy является лучшим вариантом

+0

Я хотел бы избежать необходимости писать SQL и «просто» передать объект POCO, а затем позволить Dapper выяснить остальное - это похоже на то, что я уже делаю. –

+0

Dapper из коробки не поддерживает его, вам нужно посмотреть расширения, упомянутые выше, Dapper.Contrib известен, хотя, скорее всего, вам придется иметь дело с проблемами в расширении, поскольку они не так широко используются Dapper сам –

+0

Да, я немного поиграл с Contrib и Extensions, и, надеюсь, они могут поддержать то, что я хотел бы - по крайней мере, для некоторых из них. –

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