2016-08-20 114 views
0

我正在拍攝一個拍賣應用程序。目前我正在參與投標制度。我的拍賣模型包括:C#MVC實體框架不更新對象的列表屬性

public class Auctions 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 
    (...) some more fields like title, description etc(...) 
    public List<Bid> bids = new List<Bid>(); // a list of bids from the users 
} 
public class Bid 
{ 
    public string bidAuthor { get; set; } 
    public decimal bid { get; set; } 
    public DateTime bidDate { get; set; } 
} 

在視圖中,我有一個表格,用於發送的出價:

@model BiddingViewModel 
(...)info stuff about the auction(...) 
@using (Html.BeginForm("CreateBid", "Auction", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(model=>model.auctionToSend.ID) 
    @Html.EditorFor(model => model.bid) 
    <input type="submit" value="Send a bid" /> 

} 

然後,我的位指示:

[Authorize] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> CreateBid(BiddingViewModel bvm) 
    { 

     var user = await _userManager.FindByIdAsync(HttpContext.User.GetUserId()); 
     var tmp = _context.Auctions.FirstOrDefault(i => i.ID == bvm.auctionToSend.ID); 
     Bid newBid = new Bid() 
     { 
      bid = decimal.Parse(bvm.bid.ToString()), 
      bidAuthor = user.Email, 
      bidDate = DateTime.Now 
     }; 
     tmp.bids.Add(newBid); 
     _context.Entry(tmp).State = Microsoft.Data.Entity.EntityState.Modified; 
     _context.SaveChanges(); 
     return RedirectToAction("AuctionList", "Auction"); 
    } 

不幸的是,這並未」 t似乎更新我的數據庫(VARBINARY(MAX)類型)中的bids列。我究竟做錯了什麼?

+0

解釋沒有ü嘗試調試代碼?你有一些錯誤嗎? – Alexandr

+0

您不需要將實體設置爲EntityState.Modified,EF將爲您執行此操作。 – DavidG

+0

另外,你可以顯示你的模式?最後一句話似乎暗示「出價」是一列,而不是它自己的表格。這意味着你應該得到一些非常奇怪的錯誤。 – DavidG

回答

0

我會盡力爲未來的用戶解釋這一點:問題在於我試圖添加列表作爲表的列。我應該做的是增加一個新表的投標,在ApplicationDbContext鏈接:

public DbSet<Auctions> Auctions { get; set; } 
public DbSet<Bid> Bids { get; set; } 
protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Auctions>() 
    .HasOne(p => p.Signup) 
    .WithMany(b => b.Auction); 

    modelBuilder.Entity<Bid>() 
    .HasOne(p => p.Auction) 
    .WithMany(b => b.bids); 

    base.OnModelCreating(modelBuilder); 
} 

,其餘是在斯蒂芬·馬克的意見