我是身份框架的新手,也许我在这里做的不是最好的方法,但是无论哪种方式,以下是我的情况:
在"角色"因素之外,我应用程序上的某些领域也应考虑给定的"公司"是否附加了给定的用户。
我创建了一个新的实体"公司"(非常简单,仅带有ID和名称)和一个关系实体" UserCompany"(使用用户和公司的ID)。我试图使其与身份框架上的角色和用户之间使用的结构尽可能相似。
在我的ApplicationDbContext中,我添加了DBSET和一些逻辑,例如,向用户添加了公司列表。
我面临的问题是" Savechanges"不会将更改应用于数据库。*编辑:没有错误,savechanges()的结果为" 1"。
这是我的applicationdbcontext
的示例代码public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Company> Companies { get; set; }
public DbSet<UserCompany> UserCompanies { get; set; }
//constructors, etc...
public void AddToCompanies(string _userId, params string[] _companyIds)
{
foreach (var companyId in _companyIds)
{
UserCompanies.Add(new UserCompany()
{
UserId = _userId,
DataAreaId = companyId
});
}
int result = this.SaveChanges();
}
}
这是我映射这个" USERCOMPANY"实体的方式
public class UserCompany
{
[Key, Column(Order = 1), ForeignKey("ApplicationUser")]
public string UserId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
[Key, Column(Order = 2), ForeignKey("Company")]
public string DataAreaId { get; set; }
public virtual Company Company { get; set; }
}
在我的UseradMincontroller类上,我创建了一个私有应用程序DBContext对象,该对象负责调用此逻辑。我怀疑我要处理两个不同的上下文以保存此数据存在一些问题(在ApplicationUserManager对象和此新数据中一个),但是我不确定这是否真的是问题,或者我是否是否存在问题在这里缺少其他东西。
任何帮助将不胜感激!
是UserCompany
模型应该像这样
public class UserCompany
{
[Key, Column(Order = 1)]
public string UserId { get; set; }
[ForeignKey("UserId ")]
public virtual ApplicationUser ApplicationUser { get; set; }
[Key, Column(Order = 2)]
public string DataAreaId { get; set; }
[ForeignKey("DataAreaId")]
public virtual Company Company { get; set; }
}
并检查是否使用TransactionScope
并不提交。希望它有帮助!