Подтвердить что ты не робот

Создание инфраструктуры Entity реализует интерфейс

Я хочу использовать IoC с инфраструктурой Entity и Ninject. Я полагаю, мне нужны классы Generated Entity для реализации интерфейса ICRUD. Там прохождение, в котором показано, как заставить инфраструктуру Entity реализовать интерфейс. Я следил за указаниями, и мой файл EntityObjectCodeGenerator.cs действительно показывает "ICrud", но не реализует интерфейс. Я не вижу подклассы под EntityObjectCodeGenerator.tt, поскольку в статье говорится, что я должен. Я получаю сообщение об ошибке

'BugnetMvc.Models.BugNetEntities' делает не использовать интерфейс 'BugnetMvc.Services.ICrud.Update()'

ОБНОВЛЕНИЕ
Целью является создание тестовой расширяемой интрасети MVC-3 с использованием структуры сущностей, которая также поддерживает строго типизированные представления и частичные представления. С моего небольшого уровня опыта с Ninject до сих пор я считаю, что мне нужно перегрузить мой конструктор Controller сервисом для самого представления (предположим, что методы CRUD доступны для каждого интерфейса) и по одному для каждого частичного представления:

например.

public HomeController(HomeService homeCrudService, PartialViewService1 partialviewService)

Update2
Чтобы быть ясным и, надеюсь, помочь другим, код может быть реализован следующим образом:

Вот как можно расширить Entity

namespace BugnetMvc.Models//ensure namespace matches entity
{
    public partial class Milestone : ICrud<Milestone>//Entity, note the CRUD generic.  This gives us a lot of flexibility working with Ninject
    {
        public bool Create()
        {
            throw new System.NotImplementedException();
        }

        public List<Milestone> Read()
        {
            var milestones = new List<Milestone>();

            var result = from a in new BugNetEntities1().Milestones
                            where a.MilestoneID >= 0
                            select new { a.Milestone1 };

            milestones = result.AsEnumerable()
                                        .Select(o => new Models.Milestone
                                        {
                                            Milestone1 = o.Milestone1
                                        }).ToList();
            return milestones;
        }

        public bool Update()
        {
            throw new System.NotImplementedException();
        }

        public bool Delete()
        {
            throw new System.NotImplementedException();
        }
    }

Пример экземпляра Mock:

namespace BugnetMvc.Services
{
    public class MilestoneServiceMock : ICrud<MilestoneMock>
    {
        public MilestoneServiceMock()
        {

        }

        public bool Create()
        {
            throw new System.NotImplementedException();
        }

        public bool Update()
        {
            throw new System.NotImplementedException();
        }

        public bool Delete()
        {
            throw new System.NotImplementedException();
        }


        List<MilestoneMock> ICrud<MilestoneMock>.Read()
        {
            //string[] mileStones = new string[14];
            List<MilestoneMock> milestoneMocks = new List<MilestoneMock>();
            milestoneMocks.Add(new MilestoneMock("New"));
            milestoneMocks.Add(new MilestoneMock("Assessment"));
            milestoneMocks.Add(new MilestoneMock("Pending Approval"));
            milestoneMocks.Add(new MilestoneMock("Pending Start"));
            milestoneMocks.Add(new MilestoneMock("Planning"));
            milestoneMocks.Add(new MilestoneMock("Dev-In Process"));
            milestoneMocks.Add(new MilestoneMock("Dev-Pending Approval to QA"));
            milestoneMocks.Add(new MilestoneMock("Dev-Pending Move to QA"));
            milestoneMocks.Add(new MilestoneMock("QA-In Process"));
            milestoneMocks.Add(new MilestoneMock("QA-UAT"));
            milestoneMocks.Add(new MilestoneMock("QA-Pending Approval to Prod"));
            milestoneMocks.Add(new MilestoneMock("QA-Pending Move to Prod"));
            milestoneMocks.Add(new MilestoneMock("On-Going"));
            return milestoneMocks;
        }
    }
}
//Global.asax
        internal class SiteModule : NinjectModule
        {
            public override void Load()
            {
                bool MOCKDB = true;
                MOCKDB = false;
                if (MOCKDB)
                {
                    //Set up ninject bindings here.
                    Bind<ICrud<MilestoneMock>>().To<MilestoneServiceMock>();
                    Bind<ICrud<Application>>().To<ApplicationService>();
                }
                else
                {
                    //Set up ninject bindings here.
                    Bind<ICrud<Milestone>>().To<Milestone>();
                    Bind<ICrud<Application>>().To<ApplicationService>();
                }
            }
        }

Может возникнуть потребность в Read (int Id), и в этом случае новый интерфейс, использующий те же основные идеи выше, должен сделать трюк. Можно даже обновить ICrud, чтобы передать тип модели в методы. Там много вариантов. Это помогло мне, благодаря Jon Skeet за его экспертное руководство.

4b9b3361

Ответ 1

Предположительно, сгенерированные классы сущностей являются частичными классами, правильно?

Если это так, вы можете просто добавить свои собственные файлы с частичным классом, чтобы указать интерфейсы, которые должны быть реализованы, и предоставить любые реальные методы реализации, которые вам нужны. Я подозреваю, что это будет намного проще, чем изменение того, что генерируется.

Ответ 2

Реализация интерфейса должна быть добавлена ​​к шаблону T4 при его изменении. Он не показан на скриншотах, но упоминается как элемент 13, что пользователь должен реализовать интерфейс IValidate в шаблоне T4. Как только реализация будет предоставлена, созданные классы также будут иметь эти реализации.

Пользователь: отмечает, что сгенерированные классы (в файле .tt) реализуют интерфейс IValidate, как ожидалось

Ответ 3

Как создать базовый класс (за пределами EntityModel), из которого все сущности получают (простую модификацию в файле шаблона T4) и реализовать интерфейс в базовом классе один раз? Он отлично подходит для меня.