public void Add(Dinner dinner) {
db.Dinners.InsertOnSubmit(dinner);
}
Вот пример поиска по ID в таблице dinner:
public Dinner GetDinner(int id) {
return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}
Так как в проекте Nerddinner используется только одна таблица, то это разработчиков устраивает. Но в моей базе данных 7 таблиц, и видимо есть способ не писать один и тот же код для всех таблиц. И вот в инете нахожу ссылку на универсальный Repository.
http://mikehadlow.blogspot.com/2008/03/using-irepository-pattern-with-linq-to.html
Только мне нужен на VB.
И вот предлагаю небольшую адаптацию написанную на VB.
Добавление записи в таблицу:
Public Sub Add(Of T)(ByRef Tab As T)
dc.GetTable(GetType(T)).InsertOnSubmit(Tab)
End Sub
Action метод для создания записи в таблице Printer будет такой:
Function CreatePrinter(ByVal Row As Printer) As ActionResult
Try
Datawork.Add(Of Printer)(Row)
Datawork.Save()
Return RedirectToAction("Printer")
Catch
Return View()
End Try
End Function
Удаление делается аналогично:
Public Sub Delete(Of T)(ByRef Tab As T)
dc.GetTable(GetType(T)).DeleteOnSubmit(Tab)
End Sub
А вот универсальный поиск по ID оказался для меня сложнее.
Public Function GetbyID(Of T)(ByVal ID As Int32) As T
Dim NameOfTable As ParameterExpression = Expression.Parameter(GetType(T), "x")
Dim lambda1 As Expression(Of Func(Of T, Boolean)) = _
Expression.Lambda(Of Func(Of T, Boolean))( _
Expression.Equal(Expression.Property(NameOfTable, "ID"), Expression.Constant(ID, GetType(Integer))), _
New ParameterExpression() {NameOfTable})
Return CType(dc.GetTable(GetType(T)), IQueryable(Of T)).SingleOrDefault(lambda1)
End Function
Для понимания Lambda Expression рекомендую ссылку http://chakkaradeep.wordpress.com/2008/04/14/c-30-language-enhancements-for-linq-part-3-expression-trees/ . Мне она очень помогла.
Комментариев нет:
Отправить комментарий