Моя проблема в том, что когда я удаляю объект из отношения один ко многим, дочерние записи становятся осиротевшими, а не удаляются.Я не уверен, настроил ли я свою модель домена, или я что-то не настраиваю во время автоматической настройки карты.Отношение Оценка -> ShortlistedMentor - это место, где происходят потерянные записи.Они встречаются как в таблице ShortlistMentor
, так и в таблице ShortListQuestionResponse
.Я ожидаю, что когда я удаляю ShortlistMentor
из отношения, он удаляется из таблицы ShortlistMentor, а также удаляются также записи в таблице ShortListQuestionResponse.
public class Appraisal : BaseEntity
{
public Appraisal()
{
ShortlistedMentors = new List<ShortlistedMentor>();
ApprovedMentor = new User();
College = new RefData();
}
#region Primitive Properties
public virtual bool Decision { get; set; }
public virtual System.DateTime? ApprovedDate { get; set; }
public virtual System.DateTime? AcceptedDate { get; set; }
public virtual System.DateTime? CompletionTargetDate { get; set; }
public virtual string RejectionReason { get; set; }
public virtual IList<ShortlistedMentor> ShortlistedMentors { get; set; }
public virtual User ApprovedMentor { get; set; }
public virtual RefData College { get; set; }
}
public class ShortlistedMentor : BaseEntity
{
public virtual User Mentor { get; set; }
public virtual IList<ShortListQuestionResponse> ShortListQuestionResponses { get; set; }
}
public class ShortListQuestionResponse : BaseEntity
{
public virtual string Comment { get; set; }
public virtual int Score { get; set; }
public virtual RefData Question { get; set; }
}
Автоматическая настройка карты
.Mappings
(
m =>
m.AutoMappings.Add
(
AutoMap.AssemblyOf<User>(cfg)
.Override<Client>(map =>{map.HasManyToMany(x => x.SICCodes).Table("SICRefDataToClient");})
.IgnoreBase<BaseEntity>()
.Conventions.Add(new StringColumnLengthConvention(),new EnumConvention(),DefaultCascade.SaveUpdate())
.Conventions.Add(DefaultLazy.Always())
)
не уверен, что это поможет, но вот как я удаляю элементы из коллекции и добавляю новые
ProjectToUpdate.Appraisal.ShortlistedMentors.Clear();
foreach (var userId in Request.Form["ProjectToEdit.Appraisal.ShortlistedMentors"].Split(','))
{
var user = _membershipService.GetUser(Convert.ToInt16(userId));
ProjectToUpdate.Appraisal.ShortlistedMentors.Add(new ShortlistedMentor(){Mentor = user,ShortListQuestionResponses = new List<ShortListQuestionResponse>()});
}