2016-08-20 6 views
0

私はオークションアプリケーションを作成しています。現在、私は入札システムに取り組んでいます。その後C#MVC Entity FrameworkがオブジェクトのList属性を更新しない

@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" /> 

} 

、私のcontoller:マイオークションモデルはで構成されていますビューで

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; } 
} 

、私は入札を送信するためのフォームを持っている

残念ながら
[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"); 
    } 

、これは」doesnの私のデータベース(VARBINARY(MAX))の私のbids列を更新しているようです。私は間違って何をしていますか?

+0

で説明したuがあなたのコードをデバッグしようとしましたか?いくつかのエラーがありますか? – 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); 
} 

残りはステファン・ミュエッケのコメント

関連する問題