我无法映射我的模型:
用户与管理员1到0..1的关系:
一个用户可以是一种管理员状态或无管理员状态
用户与门票1对多关系:
用户可以打开多张票证,但票证只能分配给一个用户。用户1票证到多人
管理员与Ticket 1 to Many关系:
管理员(具有管理员身份的用户)已分配给他修复的故障单。票证应该有一个adminID来标识分配给它的管理员。
我按照已有模型的教程(LOOK BELOW)。这是我第一次使用Entity Framework Web Application创建MVC,所以我不知道是否可以使用Circular Mapping。
我收到此错误:
“FK_dbo.User_dbo.Administrator_AdministratorID”。冲突发生了 在数据库“RecreationalServicesTicketingSystem.DAL.IssueContext”中, 表“dbo.Administrator”,列“AdministratorID”。声明有 已被终止。
User.cs
public class User
{
public int UserID { get; set; }
[StringLength(50, MinimumLength = 1)]
public string LastName { get; set; }
[StringLength(50, MinimumLength = 1, ErrorMessage = "First name cannot be longer than 50 characters.")]
[Column("FirstName")]
public string FirstMidName { get; set; }
public string FullName
{
get { return LastName + ", " + FirstMidName; }
}
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime EnrollmentDate { get; set; }
public int? AdministratorID { get; set; }
public virtual Administrator Administrator { get; set; }
public int DepartmentID { get; set; }
[ForeignKey("DepartmentID")]
public virtual Department Department { get; set; }
public int DepotID { get; set; }
[ForeignKey("DepotID")]
public virtual Depot Depot { get; set; }
public virtual ICollection<Ticket> Tickets { get; set; }
}
Administrator.cs
public class Administrator
{
public int AdministratorID { get; set; }
public string AdministratorTitle { get; set; }
public virtual ICollection<Ticket> Tickets { get; set; }
}
Ticket.cs
public class Ticket
{
public int TicketID { get; set; }
public string Issue { get; set; }
[DisplayFormat(NullDisplayText = "No Priority")]
public Priority? Priority { get; set; }
[ForeignKey("CategoryID")]
public virtual Category Category { get; set; }
public int CategoryID { get; set; }
public int AdministratorID { get; set; }
[ForeignKey("UserID")]
public virtual User User { get; set; }
public int UserID { get; set; }
}
我跟随这个1到0..1模型为我(用户/讲师)1到0 ... 1(管理员/ OfficeAssignment)
public class Instructor
{
public Int InstructorID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public int? OfficeAssignmentID { get; set; }
public virtual OfficeAssignment OfficeAssignment { get; set; }
public int? HomeID { get; set; }
public virtual Home Home { get; set; }
}
public class OfficeAssignment
{
public int OfficeAssignmentID { get; set; }
public string Location { get; set; }
}
我跟随这个1对多模型为我(管理员/团队)1到0 ... 1(票务/玩家)
Player.cs
public class Player
{
public int PlayerId { get; set; }
public string Name { get; set; }
public int TeamId { get; set; }
public virtual Team Team { get; set; } // This is new
}
Team.cs
public class Team
{
public int TeamId { get; set; }
[Required] public string Name { get; set; }
public string City { get; set; }
public DateTime Founded { get; set; }
public virtual ICollection<player> Players { get; set; } // This is new
}
答案 0 :(得分:0)
在我的用户声明中分配AdminID之前,我没有在配置文件中对管理员进行十分转换。
Configuration.cs Snippet
var administrator = new List<Administrator>
{
new Administrator {AdministratorID = 1, AdministratorTitle = "Administrator Lvl 1"},
new Administrator {AdministratorID = 1, AdministratorTitle = "Administrator Lvl 2"},
new Administrator {AdministratorID = 1, AdministratorTitle = "Administrator Lvl 3"},
};
administrator.ForEach(s => context.Administrators.AddOrUpdate(p => p.AdministratorID, s));
context.SaveChanges();
var users = new List<User>
{
new User { FirstMidName = "Jason", LastName = "Wan",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1, DepotID = 1,AdministratorID = 1},
new User { FirstMidName = "Andy", LastName = "Domagas",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1,DepotID = 1,AdministratorID = 2},
new User { FirstMidName = "Denis", LastName = "Djohar",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1 ,DepotID = 1,AdministratorID = 3},
new User { FirstMidName = "Christine", LastName = "West",
EnrollmentDate = DateTime.Parse("2016-02-18"), DepartmentID = 1, DepotID = 1},
};
users.ForEach(s => context.Users.AddOrUpdate(p => p.FirstMidName, s));
context.SaveChanges();
users.ForEach(s => context.Users.AddOrUpdate(p => p.LastName, s));
context.SaveChanges();