Существует множество обучающих программ EF, использующих интерфейс IdentityUser
, но никто не доходит до того, как добавлять / обновлять связанные данные для пользователя.Я использую ASP.NET MVC, поэтому предположим, что у меня есть следующая модель пользователя
public class AppUser : IdentityUser
{
public ICollection<Message> msges { get; set; }
}
И модель для сообщений
public class Message
{
public string MessageId { get; set; }
public string msg { get; set; }
[DataType(DataType.Date)]
public DateTime msgTime { get; set; }
public string UserId { get; set; }
public AppUser AppUser { get; set; }
}
И, конечно, dbcontext
класс, создающий таблицу сообщений и создающий отношение «один ко многим» между двумя моделями.
public class AppIdentityDBContext : IdentityDbContext<AppUser>
{
public AppIdentityDBContext() : base()
{ }
public AppIdentityDBContext(DbContextOptions<AppIdentityDBContext> options) : base(options)
{ }
public DbSet<Message> Messages { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<AppUser>()
.HasMany(x => x.msges)
.WithOne(y => y.AppUser);
}
}
Это все круто, но как я собираюсь добавить новую запись сообщения для соответствующего пользователя?Читая учебники с «похожими» проблемами, я прочитал, что задание UserManager
instance - обновлять пользовательские данные.Поэтому я попробовал что-то подобное в контроллере:
// Find the user, what works
AppUser Benny = UserMan.FindAsyncByName("BennyHill");
// I create a message object than I add it the Benny's msgs property
Benny.msgs.Add(newMessage); // --> for some reason this throws nullreference exception
// Next step would be to update the data with the UserManager instance
await UserMan.UpdateAsync(Benny);
Любая мудрость приветствуется.Спасибо, ребята.