Я создал универсальный репозиторий, который принимает переданный ему тип, и когда я создаю метод ввода данных, сущность создается нормально, но когда я создаю связанную с ней сущность, я снова создаю базовую сущность. Есть идеи почему?
Подробнее ..
Я разделил спецификацию на несколько таблиц для управления вещами ...
Теперь у меня есть лицо-лицо, лицо-заявитель ... (на самом деле заявитель и лицо одно и то же), лицо-подрядчик. Подрядчик может быть создан только заявителем, и поэтому заявитель всегда будет создаваться, и, следовательно, человек всегда будет создаваться.
Когда я продолжаю создавать человека, это создает человека в порядке, но когда я создаю заявителя, он снова создает человека. Аналогично, когда я создаю подрядчика, он по какой-то причине создает человека и нескольких заявителей.
Вот мой 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;
}
}
}
}