Ошибка, отношение не может быть изменено, потому что внешний ключ не может обнуляться с помощью WCF и Automapper - PullRequest
0 голосов
/ 02 января 2019

Я работаю над проектом, который использует WCF на стороне сервера для выполнения операций CRUD с данными. Данные преобразуются в модель с использованием Automapper. Код службы WCF указан ниже.

    [ServiceContract]    
    public interface IGuardService
    {
        [OperationContract]
        int UpdateGuest(Guest ev);
    }

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    public class GuardService : IGuardService
    {
        public IGuardUow Uow;


        public GuardService(IGuardUow uow)
        {
             this.Uow = uow;
             cfg.CreateMap<Guest, Guest>().ForMember(dest => dest.RowVersion, map => map.Ignore())
            .ForMember(dest => dest.VisitingPlace, opt => opt.UseDestinationValue())
            .ForMember(dest => dest.ChangeUser, opt => opt.UseDestinationValue())
            .ForMember(dest => dest.Section, opt => opt.UseDestinationValue())
            .ForMember(dest => dest.CreateUser, opt => opt.UseDestinationValue());
        }
        public int UpdateGuest(Guest ev)
        {
            try
            {
                Guest e = Uow.Guests.GetAllByCondition(u => u.GuestId == ev.GuestId).FirstOrDefault();
                Mapper.Map<Guest, Guest>(ev, e);
                Uow.Guests.Update(e);

                Uow.Commit();
                return 1;
            }
            catch (Exception ex)
            {
                return -1;
            }
        }
}

С другой стороны, конфигурация для Ninject следующая:

private static void RegisterServices(IKernel kernel)
        {

            kernel.Bind<RepositoryFactories>().To<RepositoryFactories>()
                .InSingletonScope();
            kernel.Bind<IRepositoryProvider>().To<RepositoryProvider>().InSingletonScope();
            kernel.Bind<IGuardUow>().To<GuardUow>().InSingletonScope();
            kernel.Bind<IGuardService>().To<GuardService>().InSingletonScope();

        } 

А также общий метод обновления, реализованный следующим образом:

public virtual void Update(T entity)
        {
            DbEntityEntry dbEntityEntry = DbContext.Entry(entity);

            if (dbEntityEntry.State == EntityState.Detached)
            {
                DbSet.Attach(entity);
            }
            dbEntityEntry.State = EntityState.Modified;


        }

Почему я получаю эту ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...