у меня есть две таблицы PartyRole и PartyRoleType в базе данных, модели которой в приложении являются:Проблема при создании новых записей в базе данных + MVC4
PartyRole:
public partial class PartyRole : ILockable, IAuditable, IOverTime
{
/*** Construtor(s) ***/
public PartyRole()
{
}
public PartyRole(PartyRoleType obj)
: this()
{
PartyRoleType = obj;
}
/*** Public Members ***/
[Key, Display(Name = "Id")]
public int PartyRoleId { get; set; }
[Required]
public int PartyRoleTypeId { get; set; }
[Required]
public int PartyId { get; set; }
/* IOverTime */
[Required, Display(Name = "From")]
public System.DateTimeOffset FromDate { get; set; }
[Display(Name = "Thru")]
public Nullable<System.DateTimeOffset> ThruDate { get; set; }
/* Navigation Properties */
/// <summary>
/// Foreign key to PartyRoleType: PartyRoleTypeId
/// </summary>
public virtual PartyRoleType PartyRoleType { get; set; }
}
PartyRoleType:
public partial class PartyRoleType : ILockable, IAuditable, IEntity
{
/*** Construtor(s) ***/
public PartyRoleType()
{
PartyRoleTypePartyRoles = new List<PartyRole>();
}
/*** Public Members ***/
[Key, Display(Name = "Id")]
public int PartyRoleTypeId { get; set; }
/* IEntity */
public string Caption { get; set; }
public string NameInUse { get; set; }
public string Description { get; set; }
/* Navigation Properties */
/// <summary>
/// Foreign key from PartyRole: PartyRoleTypeId
/// </summary>
public virtual ICollection<PartyRole> PartyRoleTypePartyRoles { get; set; }
}
Мы используют шаблоны unitofwork и репозитория для общения с базой данных.
Я покажу экран (в основном, MVC), чтобы создать новую роль партии или отредактировать роль стороны eixsting.
Возьмите сценарий создания новой партийной роли. Я заполню FromDate & ThruDate, и я выберу PartyRoleType, что он будет принадлежать выпадающему списку PartyRoleType и нажмет на сохранение.
Я получаю сообщение об ошибке, связанной с PartyRoleType Caption, NameInUse и т. Д. Я удалил требуемую аннотацию данных из модели PartyRoleType, потому что любые способы, которыми мы не заполняем таблицы типов из пользовательского интерфейса.
ушла Эта ошибка, однако я получаю другую ошибку он не может вставить аннулирует Into подпись nameinuse и т.д.,
В основном то, что происходит, если я пытаюсь создать новый PartyRole, то UnitOfWork пытается создать записи в PartyRoleType. Я думаю, что он пытается создать записи во всех своих дочерних элементах, которые не должны произойти.
Может кто-нибудь, пожалуйста, сообщите, как с этим справиться, или я делаю что-то неправильно здесь?
Мой контроллер:
[HttpPost]
public ActionResult Create(PartyRole obj)
{
obj.Party.PartyId = obj.PartyId;
obj.PartyRoleType.PartyRoleTypeId = obj.PartyRoleTypeId;
if (ModelState.IsValid)
{
PartyRoleRepo.Create(obj);
UnitOfWork.Save();
return RedirectToAction("List");
}
else
{
ViewBag.PossiblePartyRoleTypes = PartyRoleTypeRepo.All();
ViewBag.PossibleParties = PartyRepo.All();
return View();
}
}
Код, который населяет PartyRoleTypes:
<div class="l">
PartyRoleType
@(Html.DropDownListFor(O =>
O.PartyRoleTypeId,
((IEnumerable<PartyBiz.Models.Objects.PartyRoleType>)ViewBag.PossiblePartyRoleTypes)
.Select(OPT =>
new SelectListItem
{
Text = (OPT == null ? "None" : OPT.Caption),
Value = OPT.PartyRoleTypeId.ToString(),
Selected = (Model != null) && (OPT.PartyRoleTypeId == Model.PartyRoleTypeId)
}
),
"Choose...",
new { @class = "combo"}
)
)
@Html.ValidationMessageFor(o => o.PartyRoleTypeId)
</div>
У меня так много данных в PartyRoleType.Caption from PartyRoleType, я показываю его в представлении mvc в выпадающем меню, чтобы пользователь мог pcik типа для созданного им partyrole. PartyRoleTypeId - это внешний ключ в PartyRole. Мы определенно не вставляем фиктивные данные в PartyRoleType, потому что создание новых типов - это другой процесс. Мы получаем список разрешенных типов от клиента, и мы обновляем эти таблицы по-разному. Здесь что-то связано с Unitofwork.Save(), мы не всегда хотим, чтобы это создало дочерние записи, это неправильно! – mmssaann
Да, это определенно неправильно :). Это странно, я боюсь, что я неправильно понял. Можете ли вы показать код, который заполняет раскрывающийся список PartyRoleType? – Jack
Thats alright..Я рад, что вы взяли когда-нибудь, чтобы посмотреть на этот вопрос .. – mmssaann