具有实体框架模型映射的MVC

时间:2016-03-12 05:21:48

标签: c# asp.net-mvc entity-framework relational-database

我无法映射我的模型:

用户与管理员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
}

1 个答案:

答案 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();