2016-03-12 2 views
1

У меня возникли проблемы, отображающую мои модели:MVC с Entity Framework Модель Mapping

пользователя админу 1 до 0..1 отношения:

Один пользователь может быть один вид статуса администратора или нет админ статус

Пользователи на билеты 1 ко многим отношений:

Пользователи могут открывать несколько билетов, но билет может быть назначен только одному пользователю. Пользователь в билете 1 ко многим

Администратором билета 1 ко многим отношений:

Администратор (пользователь со статусом администратора) имеет билеты, возложенные на него, чтобы исправить. Билет должен иметь adminID, чтобы определить, какой администратор ему назначен.

Я следил за учебниками, которые уже имеют модели (СМОТРЕТЬ НИЖЕ). Я впервые создаю MVC с веб-приложением Entity Framework, поэтому я не знаю, возможно ли круговое сопоставление.

Я получаю эту ошибку:

"FK_dbo.User_dbo.Administrator_AdministratorID". The conflict occurred in database "RecreationalServicesTicketingSystem.DAL.IssueContext", table "dbo.Administrator", column 'AdministratorID'. The statement has been terminated.

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 модели для моего (User/инструктора) 1 0 ... 1 (Administrator/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 ко многим модели для моего (Administrator/Team) 1 до 0 ... 1 (Ticket/плеер)

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

У вас не хватает общественного администратора виртуального администратора {получить; задавать; } в вашей модели Ticket. Также обязательно определите [ForeignKey («AdministratorID»)] –

+0

Я добавил 'public virtual Administrator Administrator {get; задавать; } 'к модели билета и' [ForeignKey («AdministratorID»)] 'above' public virtual Administrator Administrator {get; задавать; } 'в User.cs и Ticket.cs, и он все еще имел ту же ошибку – TykiMikk

+0

@UthmanRahimi' System.Data.SqlClient.SqlException: инструкция INSERT противоречила ограничению FOREIGN KEY «FK_dbo.User_dbo.Administrator_AdministratorID». Конфликт произошел в базе данных «LeisureServicesTicketingSystem.DAL.IssueContext», таблица «dbo.Администратор ", столбец 'AdministratorID'. Заявление было прервано.' – TykiMikk

ответ

0

Я не декалировал мой администратор в своем файле конфигурации перед назначением AdminID в моей декларации пользователя.

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(); 
Смежные вопросы