Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架核心对标识和自定义表关系执行CRUD操作_C#_Asp.net Core_Identity_Ef Core 2.0 - Fatal编程技术网

C# 使用实体框架核心对标识和自定义表关系执行CRUD操作

C# 使用实体框架核心对标识和自定义表关系执行CRUD操作,c#,asp.net-core,identity,ef-core-2.0,C#,Asp.net Core,Identity,Ef Core 2.0,我有以下dbcontext类: public class AppDbContext : IdentityDbContext<AppUser> { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Initiative> initiatives { get; set; } public DbSet

我有以下dbcontext类:

public class AppDbContext : IdentityDbContext<AppUser>
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
    : base(options) { }
    public DbSet<Initiative> initiatives { get; set; }
    public DbSet<AppUser> AppUsers {get; set;}
}
我正在尝试创建一个initiative对象,并使用以下代码将其存储到数据库中,该代码引发对象空引用异常:

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,因此无法添加到数据库中。但除非EF Core在其
SaveChanges()
之后分配id,否则不会为该对象分配id


创建计划表并同时更新用户表的最佳方法是什么?

您不需要同时更改用户和计划。如果您只留下以下代码,它应该可以工作:

Initiative i = new Initiative(init_model);
i.UserId = _usermgr.GetUserId(HttpContext.User);
_dbContext.initiatives.Add(i);
_dbContext.SaveChanges();

引发“Null引用异常”,因为您的user.user\u\u创建的属性为Null。数据库应用程序体系结构中存在更多错误。

我可以查看
AppUser
的类定义吗?@MikeCorcoran AppUser类有一个问题,我没有将getter和setter添加到
用户创建的
属性中。这个问题由@Nikolay的解决方案解决了。是的,这就是我想要验证的。很高兴你解决了这个问题!是的,这很有效。是的,我忘了将getter和setter添加到
用户创建的
属性中。那么如何填充
AppUser.initiative
?EF core是否在后台自动执行此操作?EF core中的公共DbSet主动性{get;set;}关系由导航属性处理。用户表中的上述属性是导航属性,将用于获取相关实体。(在本例中,它是主动权的集合)EF Core可以用三种不同的方法加载数据:当您添加一个以userId作为外键的主动权时。然后您可以从initiative对象访问相关用户,反之亦然。
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();
Initiative i = new Initiative(init_model);
i.UserId = _usermgr.GetUserId(HttpContext.User);
_dbContext.initiatives.Add(i);
_dbContext.SaveChanges();