2016-03-21 3 views
0
namespace BoatShop.Controllers 
{ 
    public class ManagerController : Controller 
    { 
    ApplicationDbContext dbContext; 
    public ManagerController() 
    { 
     dbContext = new ApplicationDbContext(); 
    } 
    public ManagerController(ApplicationUserManager userManager) 
    { 
     UserManager = userManager; 
    } 
    private ApplicationUserManager _userManager; 
    public ApplicationUserManager UserManager 
    { 
     get 
     { 
      return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     } 
     private set 
     { 
      _userManager = value; 
     } 
    } 

    public ActionResult Index() 
    {return View();} 

    public ActionResult ViewBoats() 
    { 
     var allBoats = dbContext.Boats.Where(x => x.isArchived == false).ToList(); 
     return View(allBoats); 
    } 

    public ActionResult MakeOrder(int boatId) 
    { 
     OrderViewModel model = new OrderViewModel 
     { 
      boatId = boatId, 
      boatName = dbContext.Boats.FirstOrDefault(x => x.Id == boatId).Name, 
      ManagerName = User.Identity.Name, 
      userList = dbContext.Users.ToList() 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult MakeOrder(OrderViewModel model) 
    { 
     model.Order.Boat = dbContext.Boats.FirstOrDefault(x=>x.Id==model.boatId); 
     ApplicationUser seller = UserManager.FindById(User.Identity.GetUserId()); 
     ApplicationUser customer = UserManager.FindById(model.CustomerId); 
     model.Order.SalePerson = seller; 
     model.Order.Customer = customer; 
     model.Order.CreationDate = DateTime.Now; 
     var order = model.Order; 
     dbContext.Orders.Add(order); 
     dbContext.SaveChanges(); 
     return RedirectToAction("Index"); 
     } 
    } 
} 

iは、そのエラーがIEntityChangeTrackerの複数のインスタンスでエンティティオブジェクトを参照することはできません。試行錯誤することでのWi

model.Order.SalePerson = seller; model.Order.Customer = customer; 

それらの線によって引き起こされる見出しました。どういうわけか、私はusermanagerからそれらを切り離す必要があると思うが、私はどのように手掛かりがありません。どうすればこの問題を解決できますか?前もって感謝します。

+0

可能な複製:http://stackoverflow.com/questions/10191734/entity-object-cannot-be-referenced-by-multiple-instances-ofientitychangetracker –

答えて

0

これは、DbContextの2つの異なるインスタンスからのエンティティをマージするためです。

  • UserManagerUserManager売り手と顧客は、独自のインスタンスを持ちます。
  • コントローラのコンストラクタ内のdbContext = new ApplicationDbContext()

同じインスタンスを使用する必要があります。これを行うには多くの方法があります。そのうちの1つは依存性注入です。

それとも、あなたのコードに基づいて、私はあなただけで呼び出すことができると思います:

HttpContext.GetOwinContext().Get<ApplicationDbContext>(); 

これはあなたのUserManagerとしてDbContextの同じインスタンスを与えるだろうが、私はあなたがそれを呼び出すことはできませんだと思いますコンストラクタ。アクション関数でこれを呼び出すか、UserManagerのようなプロパティを作成する必要があります。

関連する問題