我正在使用Entity Framework创建数据库。现在,我的问题是:
我有ASP.NET用户实体(ApplicationUser
)。我还有另一个用户实体(LynxUser
)。它们之间的关系是:每个ApplicationUser
可以打开一个或多个LynxUser
帐户。每个ApplicationUser
必须一次只登录一个ApplicationUser
。注册LynxUser
帐户时,也会注册LynxUser
。我不需要担心ApplicationUser
帐户的安全性,唯一的要求是public class ApplicationUser : IdentityUser {
[Display(Name = "Active User", AutoGenerateField = false), InverseProperty("SelecterUser")]
public LynxUser ActiveUser { get; set; }
[InverseProperty("ApplicationUser")]
public ICollection<LynxUser> LynxUsers { get; set; }
}
可能只使用自己的帐户。
我很难以EF喜欢的方式对其进行建模。现在,我的代码看起来像(为简洁而编辑):
public class LynxUser {
[Key, Display(Name = "User name", AutoGenerateField = true), StringLength(50, MinimumLength = 1),
Editable(false, AllowInitialValue = true)]
public string Name { get; set; }
[Required, Display(Name = "Site User", AutoGenerateField = false), Editable(false, AllowInitialValue = true),
InverseProperty("LynxUsers")]
public virtual ApplicationUser ApplicationUser { get; set; }
/// <summary>
/// This is required to establish a one-to-one transferrable relationship as the active user.
/// </summary>
[Display(Name = "Selecter User", AutoGenerateField = false), InverseProperty("ActiveUser")]
public virtual ApplicationUser SelecterUser { get; set; }
}
和
LynxUser
问题似乎是这两个实体之间的递归关系。我怎样才能更好地模拟这个?我绝对需要记录登录到的每个ApplicationUser
的最后{{1}}。
答案 0 :(得分:1)
您只需向LynxUser添加“IsActive” - 布尔标志,然后从 ApplicationUser 中删除 ActiveUser 。
所以你只需要设置“IsActive”标志。 ApplicationUser只知道它拥有哪些LynxUsers。
答案 1 :(得分:1)
我最终添加了另一个实体LynxLogin,它跟踪ApplicationUser
到LynxUser
次登录以及DateTime
。实际生成新对象并将其写入数据库时仍然存在一些问题(我必须手动设置db.Entry(user).State = EntityState.Unchanged;
以防止db.SaveChanges()
抱怨用户已经存在。