Vinnaren i pepparkakshustävlingen!
2016-10-08, 10:56
  #1
Medlem
För er som inte orkar läsa allt vill jag skapa en post med många-till-många relation till inloggad användare där jag vill lägga till UserId från inloggad användare samt PostId i associationtabellen när jag skapar en ny post. Men hur?

Jag har skapat ett nytt projekt med asp.net MVC identity

Jag har en modell Post

Kod:
public class Post
    {
        public Post()
        {
            this.ApplicationUser = new HashSet<ApplicationUser>();
        }

        public int PostId { get; set; }
        public string Message { get; set; }
        public DateTime MessageDate { get; set; }

        public virtual ICollection<ApplicationUser> ApplicationUser { get; set; }
    }

Och uppdaterade IdentityModels.cs med

Kod:
public ApplicationUser()
    {
        this.Posts = new HashSet<Post>();
    }

public virtual ICollection<Post> Posts { get; set; }

Jag får en extra associationstabell ApplicationUserPosts när jag kör applikationen. Men hur sätter jag UserId och postId i den extra tabellen ApplicationUserPosts när jag skapar en ny post?

Här är min funktion för att skapa en post

Kod:
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "PostId,Message,MessageDate")] Post post)
        {
            var user = User.Identity.GetUserId();

            if (ModelState.IsValid)
            {
                db.Posts.Add(post);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(post);
        }

och jag hämtar den inloggade användarens Id i var User.
Citera
2016-10-08, 11:34
  #2
Medlem
Skriver på mobil så det blir lite kort. Kan utveckla senare om det behövs.

Med EF så behöver du inte arbeta direkt på associationstabellen. Du kan göra det om du vill, och köra en extra insert på den efter att du skapat post.
Men i ditt fall skulle jag läsa in användaren i context (du har id, så kör en single linq på User dbset)
Tilldela sedan denna på din relationsproperty "ApplicationUser" på din nya Post-entity och spara. Done!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback