Witam serdecznie.
Uczę się trochę zabawy z ASP.NET MVC i mam pewien dosyć chyba specyficzny problem.
Rozbudowuję automatycznie generowany projekt (ten z gotową obsługą użytkowników). Dodałem sobie do niego nowy DbContext o wdzięcznej nazwie BlogContext. Jego zawartość to:
public class BlogContext : DbContext
{
public BlogContext()
: base("DefaultConnection")
{
}
public DbSet<BlogEntry> BlogEntries { get; set; }
public DbSet<Comment> Comments { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l=>l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(l => l.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new {r.RoleId, r.UserId});
base.OnModelCreating(modelBuilder);
}
}
Mam też klasę odpowiedzialną za wpisy
public class BlogEntry
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required(ErrorMessage = "Pole jest wymagane.")]
[StringLength(128,ErrorMessage = "Długość tytuły musi być między {2}-{0}",MinimumLength = 3)]
public string Title { get; set; }
[Required(ErrorMessage = "Wpis musi zawierać treść")]
[StringLength(2048,ErrorMessage = "Długość wpisu musi być między {2}-{0}",MinimumLength = 3)]
[AllowHtml]
public string Content { get; set; }
public virtual ApplicationUser Author { get; set; }
public DateTime CreationDate { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
Niestety przy próbie wywołania kodu
public string AddEntry(string title, string content)
{
BlogEntry entry = new BlogEntry()
{
Author = UserManager.FindById(User.Identity.GetUserId()),
Title = title,
Content = content,
CreationDate = DateTime.Now
};
using (var context = new BlogContext())
{
context.BlogEntries.Add(entry);
context.SaveChanges();
}
return "Dodano wpis";
}
Który to teoretycznie powinien ładnie dodać mi do bazy danych wpis przesłany w formularzu, otrzymuję komunikat taki jak na obrazku:
Wydaje mi się, że jest to właśnie wina tego, że posiadam dwa różne DbContext, ale nie wiem jak to naprawić. Jakieś pomysły?
Nie chcę wszystkich danych trzymać w samym ApplicationDbContext, bo to podobno nie jest dobra praktyka i dane użytkownika jako takiego powinno się odseparować jednak.