Avoir une relation plusieurs à plusieurs entre les utilisateurs et les messages. Je veux créer de nouvelles valeurs dans la table de poste et la table d'association avec le postID et l'identification de l'utilisateur connecté. Aucun message d'erreur et il semble que je puisse créer un message lorsque j'exécute l'application, mais rien n'est sauvegardé dans une table. Je peux voir quand je lance le débogage il va toutes les étapes, même enregistrer dans la base de données. Qu'est-ce qui ne va pas?Rien enregistré dans la base de données et aucune erreur, plusieurs à plusieurs relation
modèle post
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; }
}
IdentityModels
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
public ApplicationUser()
{
this.Posts = new HashSet<Post>();
}
public virtual ICollection<Post> Posts { get; set; }
}
Et ma fonction de création pour créer un nouveau poste
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "PostId,Message,MessageDate")] Post post)
{
var manager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var userId = User.Identity.GetUserId();
var user = manager.FindById(userId);
if (ModelState.IsValid)
{
user.Posts.Add(post);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}
J'ai des valeurs dans toutes les variables pour l'utilisateur (gestionnaire, userId, user) et trois tables (Posts, AspNetUsers et ApplicationUserPost)
Mise à jour
erreur lorsque je tente Fixer (et solution de CodeNotFound).
Erreur 1 'System.Data.Entity.IDbSet' ne contient pas de définition pour 'findById' et aucune méthode d'extension 'findById' accepter un premier argument de type « System.Data.Entity.IDbSet »pourrait être trouvé (vous manque une directive à l'aide ou une référence d'assemblage?)
erreur 2 « FreePost.Models.ApplicationDbContext » ne contient pas de définition pour « Joindre » et aucune méthode d'extension « Joindre » accepter un premier argument de type 'FreePost.Models.ApplicationDbContext' pourrait être found (yo yo vous manque une directive using ou une référence d'assembly?)
Le premier message d'erreur est la raison pour laquelle j'ai choisi d'utiliser userManager.
I édité ma réponse alors. Vous devez utiliser 'db.Users.Attatch' à la place de' db.Attach'. Et 'db.Users.Find' au lieu de' db.Users.FindById' – CodeNotFound