使用 entity framework 核心对身份和自定义 table 关系进行 CRUD 操作
CRUD Operations on Identity and custom table relationship using entity framework core
我有以下 dbcontext class:
public class AppDbContext : IdentityDbContext<AppUser>
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options) { }
public DbSet<Initiative> initiatives { get; set; }
public DbSet<AppUser> AppUsers {get; set;}
}
AppUsers 与 initiave 具有一对多的关系,如下所示:
public List<Initiative> user_initiatives_created;
倡议有一个导航 属性 定义如下:
public string UserId { get; set; }
[ForeignKey("UserId")]
public AppUser User { get; set; }
我正在尝试创建一个主动对象并使用以下代码将其存储到数据库,该代码会引发对象空引用异常:
Initiative i = new Initiative(init_model);
AppUser user = await _dbContext.AppUsers.FindAsync(_usermgr.GetUserId(HttpContext.User));
i.User = user;
i.UserId = _usermgr.GetUserId(HttpContext.User);
user.user_initiatives_created.Add(i); //throws exception
_dbContext.initiatives.Add(i);
_dbContext.AppUsers.Update(user);
_dbContext.SaveChanges();
我认为这是因为 i.Id
仍然是 0,因此无法添加到数据库中。但是这个对象不会被分配一个 id 除非它是 EF Core 在它之后分配一个 Id SaveChanges()
.
创建倡议 table 并同时更新用户 table 的最佳方式是什么?
您不需要同时更改用户和倡议。如果您只留下以下代码,它应该可以工作:
Initiative i = new Initiative(init_model);
i.UserId = _usermgr.GetUserId(HttpContext.User);
_dbContext.initiatives.Add(i);
_dbContext.SaveChanges();
"Null reference exception" 被抛出,因为你的 user.user_initiatives_created 属性 是空的。数据库应用架构错误较多
我有以下 dbcontext class:
public class AppDbContext : IdentityDbContext<AppUser>
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options) { }
public DbSet<Initiative> initiatives { get; set; }
public DbSet<AppUser> AppUsers {get; set;}
}
AppUsers 与 initiave 具有一对多的关系,如下所示:
public List<Initiative> user_initiatives_created;
倡议有一个导航 属性 定义如下:
public string UserId { get; set; }
[ForeignKey("UserId")]
public AppUser User { get; set; }
我正在尝试创建一个主动对象并使用以下代码将其存储到数据库,该代码会引发对象空引用异常:
Initiative i = new Initiative(init_model);
AppUser user = await _dbContext.AppUsers.FindAsync(_usermgr.GetUserId(HttpContext.User));
i.User = user;
i.UserId = _usermgr.GetUserId(HttpContext.User);
user.user_initiatives_created.Add(i); //throws exception
_dbContext.initiatives.Add(i);
_dbContext.AppUsers.Update(user);
_dbContext.SaveChanges();
我认为这是因为 i.Id
仍然是 0,因此无法添加到数据库中。但是这个对象不会被分配一个 id 除非它是 EF Core 在它之后分配一个 Id SaveChanges()
.
创建倡议 table 并同时更新用户 table 的最佳方式是什么?
您不需要同时更改用户和倡议。如果您只留下以下代码,它应该可以工作:
Initiative i = new Initiative(init_model);
i.UserId = _usermgr.GetUserId(HttpContext.User);
_dbContext.initiatives.Add(i);
_dbContext.SaveChanges();
"Null reference exception" 被抛出,因为你的 user.user_initiatives_created 属性 是空的。数据库应用架构错误较多