1

Я инициализацию сущности, как это:один ко многим отношений в сущности framewrok 4.1 код первого

TasksListDB db = new TasksListDB(); 

    public ActionResult Index() 
    { 

     var tasks1 = new List<Task>() 
     { 
      new Task { Id=1, Name = "Task 1", Difficulty = 1, DateCreated = DateTime.Parse("1/12/2011") , IsDone= true }, 
      new Task { Id=2, Name = "Task 2", Difficulty = 2, DateCreated = DateTime.Parse("11/2/2011") , IsDone = false}    
     }; 

     var tasks2 = new List<Task>() 
     { 
      new Task { Id=3, Name = "Task 3", Difficulty = 3, DateCreated = DateTime.Parse("11/2/2011") , IsDone = false}, 
      new Task { Id=4, Name = "Task 4", Difficulty = 5, DateCreated = DateTime.Parse("1/2/2010") , IsDone= true } 
     }; 

     tasks1.ForEach(t => db.Tasks.Add(t)); 
     tasks2.ForEach(t => db.Tasks.Add(t)); 

     var Persons = new List<Person> { 
    new Person { Id= 1 , Age= 10, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" }, 
    new Person { Id= 2 , Age= 10, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" }, 
    new Person { Id= 3 , Age= 10, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" }, 
    new Person { Id= 4 , Age= 10, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" }}; 

     Persons.ForEach(p => db.Persons.Add(p)); 

     return View(db.Tasks); 
    } 

мой контекст дб выглядит следующим образом:

public class TasksListDB : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Task> Tasks { get; set; } 
} 

Я хочу, чтобы назначить задачи лицам хау я могу сделать это ?

Моя модель выглядит следующим образом:

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int Age { get; set; }   
    public string EmailAddress { get; set; }   
    public virtual ICollection<Task> Tasks { get; set; } 
} 

public class Task 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    [Required] 
    public DateTime DateCreated { get; set; } 
    [Required] 
    [Range(1,5,ErrorMessage="Difficulty must be between 1 and 5")] 
    public int Difficulty { get; set; } 
    public bool IsDone { get; set; } 

    public virtual Person Person { get; set; } 
} 

Когда я запускаю мое приложение MVC, Person и задач таблицы созданы, но juntion таблица PersonTask не создана.

[EDIT]

I am assigning tasks like this in initializer class: 

    var t1 = new Task { Id = 1, Name = "Urgent Task", DateCreated = DateTime.Now, Difficulty = 2, IsDone = true }; 
      var t2 = new Task { Id = 2, Name = "Business Task", DateCreated = DateTime.Now, Difficulty = 1, IsDone = true }; 
      var t3 = new Task { Id = 3, Name = "Home Task", DateCreated = DateTime.Now, Difficulty = 2, IsDone = false }; 

context.Tasks.Add(t1); 
      context.Tasks.Add(t2); 
      context.Tasks.Add(t3); 

    var Persons = new List<Person> { 
     new Person { Id= 1 , Age= 40, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed", Tasks= new List<Task> { t1,t2 }}, 
     new Person { Id= 2 , Age= 30, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" , Tasks= new List<Task> { t1} }, 
     new Person { Id= 3 , Age= 29, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" , Tasks= new List<Task> { t3,t2 } }, 
     new Person { Id= 4 , Age= 35, EmailAddress= "[email protected]", FirstName= "Asif", LastName="Hameed" , Tasks= new List<Task> { t1,t3 } }}; 

context.Persons.Add(Persons[0]); 
      context.Persons.Add(Persons[1]); 
      context.Persons.Add(Persons[2]); 
      context.Persons.Add(Persons[3]); 

      context.SaveChanges(); 

but when i see the task table in sql server, it looks like this: 

Id Name   DateCreated   Difficulty IsDone Person_Id 
1 Urgent Task 2011-04-24 19:32:03.990 2 1 4 
2 Business Task 2011-04-24 19:32:03.990 1 1 3 
3 Home Task 2011-04-24 19:32:03.990 2 0 4 

Я полагаю, что человек таблица должна иметь задачи, не таблица задача должна иметь лицо Id

Please suggest solution. 

ответ

0

Junction таблица не будет создана, потому что вы определили один к -Много отношения не многие-ко-многим. Объекту Task в вашей модели присваивается только одному Person не многим.

Если вы хотите Ассинг Task к Person просто запустите:

person.Tasks.Add(task); 
+0

@Ladislav: Очень хороший момент. Благодарю. Я обновил вопрос. Я предполагаю, что таблица person должна иметь идентификатор задачи, но я получаю идентификатор пользователя в задаче. Не могли бы вы предложить мне, что не так в моем коде? – DotnetSparrow

+0

Уверен, что вы получаете PersonId в Задаче, потому что ваша задача имеет одну связанную Person - задачу на многих концах отношения, определяемого FK. –

+0

@Ladislave: но таблица задач не отображает задачи, назначенные человеку 2 и человеку. 3 – DotnetSparrow

Смежные вопросы