2016-08-20 1 views
0

Ich mache eine Auktionsanwendung. Momentan arbeite ich am Bietsystem. Mein Auktions-Modell besteht aus:C# MVC Entity Framework aktualisiert nicht List-Attribut eines Objekts

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

In der Ansicht, ich habe ein Formular zum Senden eines Angebots:

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

} 

Dann mein contoller:

[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"); 
    } 

Leider doesn diese‘ t scheint meine bids Spalte in meiner Datenbank (die vom Typ VARBINARY(MAX) ist) zu aktualisieren. Was mache ich falsch?

+0

Haben u versuchen, Ihren Code zu debuggen? Haben Sie Fehler? – Alexandr

+0

Sie müssen die Entität nicht als 'EntityState.Modified' festlegen, EF erledigt dies für Sie. – DavidG

+0

Kannst du auch dein Schema zeigen? Dieser letzte Satz scheint "Gebote" zu enthalten, ist eine Kolumne, anstatt eine eigene Tabelle zu sein. Was bedeutet, dass Sie einige wirklich merkwürdige Fehler bekommen sollten. – DavidG

Antwort

0

Ich werde versuchen, dies so gut wie möglich für die zukünftigen Benutzer zu erklären: Das Problem war, dass ich versuchte, die Liste als eine Spalte der Tabelle hinzuzufügen. Was habe ich war getan, um eine neue Tabelle für die Gebote hinzuzufügen, in ApplicationDbContext verbunden:

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

Der Rest wurde in Stephen Muecke Kommentaren erklärt

Verwandte Themen