C# 如何首先使用EF代码在Asp.NETMVC5中定义不同类型的用户

C# 如何首先使用EF代码在Asp.NETMVC5中定义不同类型的用户,c#,asp.net,asp.net-mvc-5,identity,C#,Asp.net,Asp.net Mvc 5,Identity,我正在创建客户管理系统。使用Asp.NETMVC5。 我想使用Asp.Net Identity 2.x定义多种类型的用户 前任: 客户、员工、附属公司 这些不是角色,因为它们都有不同的属性,有些属性是相同的。 对于身份验证,我想使用Identity User,因为Identity将负责授权和身份验证方面的其余工作。 现在我想知道如何定义它们之间的关系 我试过一些代码,但我不知道在Live Server上运行这个项目是否很好 标识用户类 “标识用户为用户创建默认属性。” 这些是我的用户类型及其关系

我正在创建客户管理系统。使用Asp.NETMVC5。 我想使用Asp.Net Identity 2.x定义多种类型的用户 前任: 客户、员工、附属公司 这些不是角色,因为它们都有不同的属性,有些属性是相同的。 对于身份验证,我想使用Identity User,因为Identity将负责授权和身份验证方面的其余工作。 现在我想知道如何定义它们之间的关系

我试过一些代码,但我不知道在Live Server上运行这个项目是否很好

标识用户类 “标识用户为用户创建默认属性。”

这些是我的用户类型及其关系

当我创建任何用户时

例如:

var client = new client();
client.FirstName = "abc";
client.LastName = "xyz";
client.AppUser.Email = "abc@example.com";
client.AppUser.UserName = "abc@example.com";
client.AppUser.Password= "123456";

var db = new myContext();
db.client.add(client);
它也很好用

问题是当我更新记录时 所以我必须更新这两个实体, 我无法同时更新两个实体, 我必须先更新AppUser,然后更新客户/员工 或客户/员工,然后是AppUser

我不知道如何编写更好的代码来成功更新这两个实体 因为我不能更新 例如:

它抛出错误

一个实体对象不能被多个IEntityChangeTracker实例引用。关于多个条目

我试图分别更新这两个实体

例如:

更新AppUser的步骤 我使用了UserManager

public JsonResult Update(Client cm)
{

var db = new myContext();
//var client = db.clients.where(x=>x.Id == cm.Id).firstordefault();
var client = db.clients.find(cm.Id);
var appUser = UserManager.Find(cm.AppUserId);

client.FirstName = cm.FirstName;
client.LastName = cm.LastName ;

appUser.Id = cm.AppUserId;
appUser.Email = cm.Email;
appUser.UserName = cm.Email;
appUser.Password= cm.Password;

 UserManager.Update(appUser);

db.Entry(client).State =    System.Data.Entity.EntityState.Modified;
 Context.SaveChanges();

}

下面是我想知道appUser是否成功更新的要点 然后在更新客户端时出错 如何检索appuser以前的记录

如何通过良好的练习做到这一点。。对不起,如果我不能使它容易理解

如何定义IdentityUser与员工/客户/附属公司之间的关系

public class Employee
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string PhoneNumber { get; set; }
        public Nullable<DateTime> DOB { get; set; }

        public IList<Client> Clients { get; set; }
        public string AppUserId { get; set; }

        [ForeignKey("AppUserId")]
        public virtual AppUser AppUser { get; set; }
        [NotMapped]
        public IList<string> UserRoles{ get; set; }

    }
public class Affiliate
    {
        public string CompanyName { get; set; }
        public string Status { get; set; }
        public decimal Commission { get; set; }
        public string AppUserId { get; set; }

        [ForeignKey("AppUserId")]
        public virtual AppUser AppUser { get; set; }

    }
var client = new client();
client.FirstName = "abc";
client.LastName = "xyz";
client.AppUser.Email = "abc@example.com";
client.AppUser.UserName = "abc@example.com";
client.AppUser.Password= "123456";

var db = new myContext();
db.client.add(client);
public JsonResult Update(Client cm)
{
var db = new myContext();
//var client = db.clients.where(x=>x.Id == cm.Id).firstordefault();
var client = db.clients.find(cm.Id);

client.FirstName = cm.FirstName;
client.LastName = cm.LastName ;
client.AppUser.Email = cm.Email;
client.AppUser.UserName = cm.Email;
client.AppUser.Password= cm.Password;


db.Entry(client).State =  System.Data.Entity.EntityState.Modified;
return Context.SaveChanges() > 0;

}

public JsonResult Update(Client cm)
{

var db = new myContext();
//var client = db.clients.where(x=>x.Id == cm.Id).firstordefault();
var client = db.clients.find(cm.Id);
var appUser = UserManager.Find(cm.AppUserId);

client.FirstName = cm.FirstName;
client.LastName = cm.LastName ;

appUser.Id = cm.AppUserId;
appUser.Email = cm.Email;
appUser.UserName = cm.Email;
appUser.Password= cm.Password;

 UserManager.Update(appUser);

db.Entry(client).State =    System.Data.Entity.EntityState.Modified;
 Context.SaveChanges();

}