PDA

View Full Version : مشکل در ذخیره داده ها در دیتابیس با استفاده از Mvc و فریم ورک Nhibernate



collector2
دوشنبه 14 مرداد 1392, 16:41 عصر
با سلام خدمت اساتید و دوستان عزیز
من به تازگی وارد معماری Nhibernate شده ام و در اولین مثالم دچار مشکل شدم.

من 3 تا جدول دارم که جدول Personnel داری دو تا FK به جداول Department و DepartmentPost می باشد.
برای ذخیره اطلاعات در دو جدول که FK ندارند مشکلی ندارم و لذا معماری که Config کردم درست کار میکنه.
ولی در خصوص جدول Personnel مشکل دارم. من کدهایی که در این مورد هست رو اینجا می نویسم امیدوارم اساتید و دوستان راهنمایی های لازم را بکنند. با تشکر فراوان

در ابتدا Mapping ها رو می نویسم

public DepartmentMap()
{
Table(@"Departments");
Id(x => x.DepartmentId);
Map(x => x.Name).Length(100);
Map(x => x.Description).Length(200);
}
public DepartmentPostMap()
{
Table(@"DepartmentPosts");
Id(x => x.DepartmentPostId);
Map(x => x.Name).Length(100);
}
public PersonnelMap()
{
Table(@"Personnels");
Id(x => x.Id);
Map(x => x.Name).Length(100).Nullable();
Map(x => x.Family).Length(100).Nullable();
Map(x => x.StartDate).Length(10).Nullable();
Map(x => x.EndDate).Length(10).Nullable();
Map(x => x.Sallary).Length(10).Nullable();

References(x => x.Department).Cascade.All().Column("DepartmentId");
References(x => x.DepartmentPost).Cascade.All().Column("DepartmentPostId");
}

بعد نوبت به آبجکت های پروژه مذکور میرسه:

public class Department
{
public virtual int DepartmentId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }

}

public class DepartmentPost
{
public virtual int DepartmentPostId { get; set; }
public virtual string Name { get; set; }
}

public class Personnel
{
public virtual int Id { get; set; }
public virtual int DepartmentPostId { get; set; }
public virtual int DepartmentId { get; set; }
public virtual string Name { get; set; }
public virtual string Family { get; set; }
public virtual string Sallary { get; set; }
public virtual string StartDate { get; set; }
public virtual string EndDate { get; set; }

public virtual Department Department { get; set; }
public virtual DepartmentPost DepartmentPost { get; set; }

}

تا اینجا فکر نمیکنم مشکلی باشه مشکل از اینجاست که وقتی میخوام تو کنترلر اکشن Creat رو بنویسم داده های ارسالی به سمت Repository من که عمل Add رو انجام بده عمل نمیکنه و داده ها در حین سیو شدن از بین میرن و در داخل دیتا بیس null ذخیره میشه و برنامه در هنگام برگشت به صفحه Index با خطا مواجه میشود.
کدی که من برای کنترلر نوشتم :

public ActionResult Create()
{

var viewModel = new PersonnelViewModel
{
Personnel = new Personnel(),
Departments = _repDepartment.GetAll().ToList(),
DepartmentPosts = _repDepartmentPost.GetAll().ToList()
};

return View(viewModel);

}

public ActionResult Save(Personnel p)
{
_repPersonnel.Add(p);

return RedirectToAction("Index");
}

ViewModel که من برای view نوشتم به شرح زیر است:


public class PersonnelViewModel
{
public Personnel Personnel { get; set; }
public List<Department> Departments { get; set; }
public List<DepartmentPost> DepartmentPosts { get; set; }
}

و این هم کدی که در قسمت view من نوشتم


@model MvcApplication_NH.ViewModels.PersonnelViewModel

@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create</h2>

@using (Html.BeginForm("Save","Personnel",FormMethod.Post)) {
@Html.ValidationSummary(true)
<fieldset>
<legend>پرسنل سازمانی</legend>

<div class="editor-label">
واحد سازمانی
</div>
<div class="editor-field">

<select id="DepartmentId" name="DepartmentId">
@foreach (var item in Model.Departments)
{
<option value="@item.DepartmentId">@item.Name</option>
}
</select>

</div>

<div class="editor-label">
پست سازمانی
</div>
<div class="editor-field">
<select id="DepartmentPostId" name="DepartmentPostId">
@foreach (var item in Model.DepartmentPosts)
{
<option value="@item.DepartmentPostId">@item.Name</option>
}
</select>
</div>

<div class="editor-label">
نام
</div>
<div class="editor-field">
نام
@Html.EditorFor(model =>model.Personnel.Name)
</div>

<div class="editor-label">
نام خانوادگی
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Personnel.Family)

</div>

<div class="editor-label">
حقوق پایه
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Personnel.Sallary)

</div>

<div class="editor-label">
تاریخ شروع
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Personnel.StartDate)

</div>

<div class="editor-label">
تاریخ پایان
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Personnel.EndDate)

</div>

<p>
<input type="submit" value="ایجاد" />
</p>
</fieldset>
}

<div>
@Html.ActionLink("بازگشت به صفحه اصلی", "Index")
</div>


در اصل با توجه به این سه تا جدول تمام مشکل با این دو تا فیلد FK هست که من در این جدول دارم.