我有两个模型类,一个是ApplicationUser
,第二个是Appointment
。应用程序用户包括使用该应用程序的所有用户,在我的案例中,是医生和数据输入操作员。医生将被分配到每个约会,数据输入操作员将这个日志记录到DB。我想要预约这些用户。我尝试过这样的事情
public class Appointment
{
public int AppointmentID { get; set; }
public DateTime Date { get; set; }
public int DoctorID { get; set; }
[ForeignKey("DoctorID")]
public virtual ApplicationUser Doctor { get; set; }
public int SystemUserID { get; set; }
public virtual ApplicationUser SystemUser { get; set; }
}
public class ApplicationUser : IdentityUser
{
public string Email { get; set; }
public string Mobile { get; set; }
public string FirstNsme { get; set; }
public string LastName { get; set; }
}
但这会引发错误
Appointment_Doctor_Target_Appointment_Doctor_Source ::参照约束的从属角色中的所有属性的类型必须与主体角色中的相应属性类型相同。实体'Appointment'上的属性'DoctorID'的类型与参照约束'Appointment_Doctor'中实体'ApplicationUser'上的属性'Id'的类型不匹配。
任何人都可以指出为什么会出现此错误以及解决此问题的正确方法是什么?
答案 0 :(得分:9)
IdentityUser,因为asp.net身份实体框架中的所有实体都以string
为密钥。您正尝试映射到int
。因此,要么在指定实体中使用Guids作为外键
public class Appointment
{
[Key]
public int AppointmentID { get; set; }
public DateTime Date { get; set; }
public string DoctorID { get; set; }
[ForeignKey("DoctorID")]
public virtual ApplicationUser Doctor { get; set; }
public string SystemUserID { get; set; }
[ForeignKey("SystemUserID ")]
public virtual ApplicationUser SystemUser { get; set; }
}
或将标识类中的ID类型更改为int。您可以找到帮助here。
答案 1 :(得分:2)
您的课程中存在多个问题。
什么是DoctorID?在何处定义?
您需要首先关注逻辑上在您的实体之间建立正确的关系。
我认为您的Appointment类不需要包含添加约会的SystemUserID。
其次,如果你想在两种用户类型之间共享一些属性而不是创建一个公共类并在Doctor和SystemUser中派生。
将DoctorId添加到Doctor表中以及与Doctor相关的特定详细信息,例如特长。
SystemUser添加约会,因此该表应包含与该名称相关的数据,即doctorId和appointmentId。
更新:
根据您的评论,您可以执行此类操作。请注意它仅供参考,您最好定义更好的DB Schema。
public class Appointment
{
public int AppointmentID { get; set; }
public DateTime Date { get; set; }
public int DoctorID { get; set; }
[ForeignKey("ApplicationUserId")]
public virtual ApplicationUser Doctor { get; set; }
public int SystemUserID { get; set; }
[ForeignKey("ApplicationUserId")]
public virtual ApplicationUser SystemUser { get; set; }
}
public class ApplicationUser
{
public int ApplicationUserId { get; set; }
public string Email { get; set; }
public string Mobile { get; set; }
public string FirstNsme { get; set; }
public string LastName { get; set; }
public UserType UserType { get; set; }
}
public enum UserType
{
Doctor,
SystemUser
}
答案 2 :(得分:1)