首先:我對asp.net mvc和代碼第一次很新。ASP.net MVC EF Codefirst重複條目
使用Asp.net MVC 4和EF 5.0
問題:
每當我選擇在下拉列表用戶,並提交後的行動。 發生了兩件事:
用戶添加到DinnerEvent爲應該:
這是選擇被複制,所以,我現在擁有的用戶的兩個實例在用戶表中的用戶在數據庫中。哪個不好。 :(
這裏是設置
我已經創建了兩個實體: DinnerEvent和用戶
的DinnerEvent類有一個導航屬性到服務員(用戶)收集
public virtual ICollection<User> Attendants { get; set; }
我在DinnerEvent控制器中創建兩個DinnerEvent庫和用戶的
的AddAttendantToEvent行動
[HttpPost]
public ActionResult AddAttendantToEvent(int users , int EventID)
{
if (ModelState.IsValid)
{
var user = userRepository.Find(users);
dinnereventRepository.Find(EventID).Attendants.Add(user); //Add the User to the Event.
dinnereventRepository.Save();
return RedirectToAction("Index");
}
else
{
return View();
}
}
視圖 - 在所有的事件迭代,並添加一個用所有用戶foreach事件填充的下拉列表。
@model Madklub.Models.ViewModel
@foreach (var item in Model.events) {
//Code to display available events
@using (Html.BeginForm("AddAttendantToEvent", "DinnerEvents")) {
@Html.Hidden("EventID", item.DinnerEventID);
@Html.DropDownListFor(m => m.users, new SelectList(Model.users, "UserID", "RoomNumber"));
<input type="submit" value="Add" />
}
ViewModel:
public class ViewModel
{
public IQueryable<DinnerEvent> events { get; set; }
public IQueryable<User> users { get; set; }
}
which is initialized like this:
Index Action in DinnerEventController:
public ViewResult Index()
{
ViewModel viewdata = new ViewModel();
viewdata.events = dinnereventRepository.AllIncluding(m => m.Attendants);
viewdata.users = userRepository.All;
return View(viewdata);
}
What am I doing wrong?
所要求的倉庫代碼:
縮小到只包含Save()方法。
請注意,這是由腳手架自動生成的所有代碼。
public class DinnerEventRepository : IDinnerEventRepository
{
MadklubContext context = new MadklubContext();
public void Save()
{
context.SaveChanges();
}
}
public class MadklubContext : DbContext
{
public DbSet<Madklub.Models.User> Users { get; set; }
public DbSet<Madklub.Models.MadklubEvent> MadklubEvents { get; set; }
}
你能張貼代碼你的倉庫? –
我已經添加了存儲庫代碼,注意:這是所有自動生成的代碼。 –
@KristianGrønborgNissen,重複的原因是,您正在向Event添加一個分離的實體(因此EF不知道它存在),因此當您保存更改時,它會添加它。 – Johan