Повторяющиеся записи - PullRequest
       11

Повторяющиеся записи

0 голосов
/ 29 октября 2009

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

Подробнее ..

Я разделил спецификацию на несколько таблиц для управления вещами ...

Теперь у меня есть лицо-лицо, лицо-заявитель ... (на самом деле заявитель и лицо одно и то же), лицо-подрядчик. Подрядчик может быть создан только заявителем, и поэтому заявитель всегда будет создаваться, и, следовательно, человек всегда будет создаваться.

Когда я продолжаю создавать человека, это создает человека в порядке, но когда я создаю заявителя, он снова создает человека. Аналогично, когда я создаю подрядчика, он по какой-то причине создает человека и нескольких заявителей.

Вот мой LINQ to SQL. Если вы все равно заметите, что я могу улучшить этот код, я буду признателен за это.

вот хранилище

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq;

namespace ParkingPermit.Models
{
    public class UniversalManagerRepository<T> :IRepositoryT<T>
                                               where T:class
    {
        private Table<T> _table;
        private readonly DB _db ;//= new DB();

        public UniversalManagerRepository()
        {
            _db = new DB();
            _table = _db.GetTable<T>();
        }

        #region IRepositoryT<T> Members

        public T Create(T create)
        {

           // _table = new DB().GetTable<T>();

            //_db.GetTable(typeof(T)).InsertOnSubmit(create);

            _table.InsertOnSubmit(create);
            Save();

            return create;
        }

        public void Delete(T delete)
        {
            throw new NotImplementedException();
        }

        public T Edit(T edit)
        {
            throw new NotImplementedException();
        }

        public T GetItem(int id)
        {
            throw new NotImplementedException();
        }

        public T Update(T update)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<T> List()
        {
            //IQueryable i = _db.GetTable(typeof(T)).AsQueryable()  ;
            return _db.GetTable(typeof(T)) as IEnumerable<T>;
            //throw new NotImplementedException();
        }

        public void Save()
        {
            //_db.SubmitChanges();
            _table.Context.SubmitChanges();
            //throw new NotImplementedException();
        }

        #endregion
    }
}

Я могу опубликовать изображение конструктора linq to sql, если это поможет, но я не вижу здесь функции ...

Большое спасибо альтернативный текст http://img509.imageshack.us/img509/2072/linq.jpg

Дело в том, что при добавлении заявителя и назначении заявителя. Персона назначается из сеанса (в связывателе модели), он создает нового человека, который фактически является исходным человеком, созданным в начале. Как я могу избежать этого.

protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)  
{  
   var personType = (Person)controllerContext.HttpContext.Session[PersonSessionKey];  

   controllerContext.HttpContext.Session[CurrentApplicantSessionKey] = null;  

   var av = new ApplicantValidator(new            ModelStateWrapper(bindingContext.ModelState));  
   var newApplicant = bindingContext.Model as Applicant;  




   if (personType == null)  
   {  

       bindingContext.ModelState.AddModelError(bindingContext.ModelName,  

                                               "Cannot Update this Instance directly, please restart the application");  
      // controllerContext.HttpContext.Session[PersonSessionKey] = personType;  
   }  
   else if (newApplicant != null)  
   {  
       if (newApplicant.Person != null)  
       {  
           if (newApplicant.Person.Equals(personType as Person))  
           {  
               bindingContext.ModelState.AddModelError(bindingContext.ModelName,  
                                                       "A person with these details already exists, please restart the application...");  
               //return  
               controllerContext.HttpContext.Session[PersonSessionKey] = null;  
               personType = null;  
           }  
       }  
       else if (av.Validate(newApplicant))  
       {  

           if (newApplicant.Person == null)  
           {  

               newApplicant.Person = personType as Person;  
               newApplicant.PersonId = personType.PersonId;  


           }  
       }  

   }  

}  

1 Ответ

0 голосов
/ 23 ноября 2009

Я разрешил эту часть, и, по-видимому, теперь она выпускается с обновлением, может кто-нибудь найдет что-нибудь необычное.

  1. Ответ на мою первую проблему состоял в том, что в связывателях моделей сущностью манипулируют из сессий и возвращают обратно на уровень обслуживания.

Очевидно, что, поскольку все это происходит вне рамок linq orm, эта сущность должна быть воссоздана как "From clause ... from ..in db." и затем linq правильно распознает его и выполняет правильную работу по вставке.

Может кто-нибудь помочь мне с обновлением / редактированием ... пожалуйста

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