2016-06-23 2 views
3

Я использую Dapper для моего приложения Windows C# форм. Я заметил, что большинство их операций CRUD принимают имя класса в качестве параметра. Например две таблицы, как показано ниже:Обновление и вставка параметров Dapper.

"Employee" Table 
     Column Name | Data Type | 
     ------------------------- 
     EmpName  | string | 
     EmpNo  | string | 
     -------------------------- 

Employee.cs 
[Table("Employee")] 
public class Employee 
{ 
    [Key] 
    public string EmpNo {get;set;} 
    public string EmpName {get;set;} 
} 

    "User" Table 
     Column Name | Data Type | 
     ------------------------- 
     UserName  | string | 
     UserNo  | string | 
     -------------------------- 
User.cs 
[Table("User")] 
public class User 
{ 
    [Key] 
    public string UserNo {get;set;} 
    public string UserName {get;set;} 
} 


    eg. var users= connection.Query<User>("select * from User"); 
     var employees = connnection.GetList<Employee>(); 

сделает соответствующие задачи. но, согласно моим знаниям connection.Insert<User>(user); or connection.Update<Employee>(emp); не существует. Пожалуйста, исправьте меня, если я ошибаюсь, есть ли какая-нибудь работа для обновления и вставки, позволяя dapper знать тип класса? Я хорошо знаю о Query() и Execute(), на самом деле я использую их прямо сейчас. Можно ли сделать так же просто, как GetList(ClassName);?

+0

Возможно, вы захотите посмотреть информацию о теге http://stackoverflow.com/tags/dapper/info, у которой есть ссылка на [Выполнение вложений и обновлений с помощью Dapper] (http://stackoverflow.com/questions/5957774/ perform-inserts-and-updates-with-dapper) –

+0

Да, мне известны функции Query and Execute, что я ищу, чтобы сделать Insert и Update такими же простыми, как GetList (ClassName) и Get (класс). –

+1

@RahulMakwana Для этого вам понадобится написать свою собственную упаковку. Из того, что я понимаю, люди, которые писали Даппера, сделали это, как я ответил ниже, чтобы оставить вещи открытыми. Зачастую код должен обновлять только определенные столбцы, поэтому передача объекта предполагает, что вы хотите обновить все столбцы, что является большим предположением для обновлений. Как это сейчас, это довольно точный код. –

ответ

2

Благодаря Марку Gravell. Я нашел его here. Разработка с открытым исходным кодом Dapper имеет реализацию для Insert<ClassName>(obj) и Update<ClassName>(obj).

2

Dapper обрабатывает вещи немного иначе, чем то, о чем вы просите. Метод Insert или Update отсутствует. Вместо этого вы хотите, чтобы это сделать, как это для вставки:

var p = new Product { Name = "Sam", Description = "Developer" }; 
p.Id = cnn.Query<int>(@"insert Products(Name,Description) 
values (@Name,@Description) 
select cast(scope_identity() as int)", p).First(); 

Это непосредственно от Sam Saffron, https://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper.

Для обновления, вы хотите, такой код:

public bool Update(Employee employee) 
{ 
    string query = "UPDATE EMPLOYEE SET NAME = @Name WHERE Id = @Id"; 
    var count = this.db.Execute(query, employee); 
    return count > 0; 
} 
+1

Или просто используйте 'Execute', если вам не нужно возвращать личность. – juharr

+2

Примечание: dapper.contrib добавляет много поддержки CRUD –