Entity Framework 4 POCO Generation - PullRequest
       19

Entity Framework 4 POCO Generation

1 голос
/ 19 февраля 2011

Хорошо ... Итак, я создал свою модель, используя EF4.Отлично!

Затем я выключил генерацию кода и скачал это расширение: http://visualstudiogallery.msdn.microsoft.com/23df0450-5677-4926-96cc-173d02752313 (POCO Entity Generator).Круто!

Запустил его, и он породил все мои классы.Это все, что мне нужно сделать?Кажется, все работает, мои репозитории попадают на объекты и сохраняются в БД.

Пожалуйста, посмотрите на следующий код и дайте мне знать, если я на правильном пути.

** Пример кода **

Контроллер:

Namespace Controllers
    Public Class HomeController
        Inherits System.Web.Mvc.Controller

        Function Index() As ActionResult
            Return View(New Models.HomeModel)
        End Function

    End Class
End Namespace

Модель:

Namespace Models
    Public Class HomeModel

        Private _Repository As Titan.Business.Repositories.ICustomerRepository
        Private _SalesRepRepo As Titan.Business.Repositories.ISalesRepresentativeRepository

        Public Property Customers As IEnumerable(Of Titan.Business.Customer)
        Public Property SalesReps As IEnumerable(Of Titan.Business.SalesRepresentative)

        Public Sub New()
            _Repository = New Titan.Business.Repositories.CustomerRepository
            _SalesRepRepo = New Titan.Business.Repositories.SalesRepresentativeRepository

            _Customers = _Repository.Query(Function(x) x.LastName.StartsWith("Str"))
            _SalesReps = _SalesRepRepo.Query(Function(x) x.LastName.StartsWith("Str"))

        End Sub

    End Class
End Namespace

Хранилище и интерфейсы:

Namespace Repositories
    Public Interface IRepository(Of T)
        Function Query(ByVal Predicate As System.Linq.Expressions.Expression(Of Func(Of T, Boolean))) As IEnumerable(Of T)
        Function GetByID(ByVal ID As Integer) As T
        Sub Add(ByVal Entity As T)
        Sub Delete(ByVal Entity As T)
        Sub Save(ByVal Entity As T)

    End Interface

    Public Interface ICustomerRepository
        Inherits IRepository(Of Customer)

    End Interface

    Public Interface ISalesRepresentativeRepository
        Inherits IRepository(Of SalesRepresentative)

    End Interface

End Namespace

Namespace Repositories
    Public Class SalesRepresentativeRepository
        Implements ISalesRepresentativeRepository

        Public Sub Add(ByVal Entity As SalesRepresentative) Implements IRepository(Of SalesRepresentative).Add

        End Sub

        Public Sub Delete(ByVal Entity As SalesRepresentative) Implements IRepository(Of SalesRepresentative).Delete

        End Sub

        Public Function GetByID(ByVal ID As Integer) As SalesRepresentative Implements IRepository(Of SalesRepresentative).GetByID

        End Function

        Public Function Query(ByVal Predicate As System.Linq.Expressions.Expression(Of System.Func(Of SalesRepresentative, Boolean))) As System.Collections.Generic.IEnumerable(Of SalesRepresentative) Implements IRepository(Of SalesRepresentative).Query
            Using db As New GTGContainer
                Return db.SalesRepresentatives.Where(Predicate).ToList
            End Using
        End Function

        Public Sub Save(ByVal Entity As SalesRepresentative) Implements IRepository(Of SalesRepresentative).Save

        End Sub
    End Class
End Namespace

Любые предложения будуттак полезно для меня.

Где вписывается сервисный слой?

А как насчет AutoMapper?Мне даже нужно использовать это сейчас?

Инъекция зависимости?Любой желающий объяснить.

Спасибо большое,
Сэм

1 Ответ

1 голос
/ 19 февраля 2011

Есть отличная статья Скотта Аллена о Тестирование Entity Framework 4 - создание классов POCO - хороший первый шаг, но если вы хотите протестировать свой бизнес-уровень отдельно от EF, вам придется ввести Единица работы, которая координирует сохранение состояния в нескольких хранилищах и позволяет использовать DI.

...