简体   繁体   English

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

[英]MVC with Entity Framework Model Mapping

I'm having trouble mapping my models: 我在绘制模型时遇到问题:

User to Admin 1 to 0..1 relationship: 用户与管理员1到0..1的关系:

One user can be one kind of admin status or no admin status 一个用户可以是一种管理员状态或没有管理员状态

Users to Tickets 1 to Many relationship: 票证一对多的用户关系:

Users can open multiple tickets but a ticket can only be assigned to one User. 用户可以打开多个票证,但票证只能分配给一个用户。 User to Ticket 1 to Many 用户票一对多

Administrator to Ticket 1 to Many relationship: 管理员与票证一对多关系:

Admin (A user with admin status) has tickets assigned to him to fix. 管理员(具有管理员身份的用户)已分配给他修复的故障单。 The ticket should have an adminID to identify which admin is assigned to it . 票证应该有一个adminID来标识分配给它的管理员。

I followed tutorials which already has models (LOOK BELOW). 我按照已有模型的教程(LOOK BELOW)。 It's my first time creating a MVC with Entity Framework Web Application so I don't know if Circular Mapping is possible. 这是我第一次使用Entity Framework Web Application创建MVC,所以我不知道Round Mapping是否可行。

I get this error: 我收到此错误:

"FK_dbo.User_dbo.Administrator_AdministratorID". “FK_dbo.User_dbo.Administrator_AdministratorID”。 The conflict occurred in database "RecreationalServicesTicketingSystem.DAL.IssueContext", table "dbo.Administrator", column 'AdministratorID'. 数据库“ RecreationalServicesTicketingSystem.DAL.IssueContext”中的表“ dbo.Administrator”的“ AdministratorID”列中发生了冲突。 The statement has been terminated. 该语句已终止。

User.cs 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 Administrator.cs

public class Administrator
{
    public int AdministratorID { get; set; }
    public string AdministratorTitle { get; set; }
    public virtual ICollection<Ticket> Tickets { get; set; }

}

Ticket.cs 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; }
}

I followed this 1 to 0..1 model for my (User/Instructor) 1 to 0...1 (Administrator/OfficeAssignment) 我按照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; }

} 

I followed this 1 to many model for my (Administrator/Team) 1 to 0...1 (Ticket/Player) 我跟着这个1对多的模型为我(管理员/团队)1到0 ... 1(票/玩家)

Player.cs 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 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
}

I didn't decalre my administrator in my Configuration file before assigning AdminID in my User declaration. 在用户声明中分配AdminID之前,我没有在配置文件中取消管理员的身份。

Configuration.cs Snippet Configuration.cs代码段

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM