Как ссылаться, а затем вставлять данные в ассоциативную сущность, которая создается автоматически в БД? - PullRequest
0 голосов
/ 14 января 2019

Я новичок в Entity Framework.

Я создал таблицы с использованием подхода Code First, и он сработал, то есть создал таблицы Users, Phones, UsersPhones.

Теперь я могу добавить данные в таблицу Phones и таблицу Users, поскольку они упоминаются в моих моделях сущностей, но как мне вставить данные в ассоциативную сущность UsersPhones, для которой у меня нет сущности или модели данных, потому что они были созданы автоматически.

Код:

Телефоны:

 public class Phones
    {
        public int ID { get; set; }
        public string Model { get; set; }
        public string Manufacturer { get; set; }
        public List<Users> Users { get; set; }
    }

Пользователи:

 public class Users
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public List<Phones> Phones { get; set; }

    }

UsersPhonesDBContext

 public class UsersPhonesDBContext: DbContext
    {
        public DbSet<Users> Users { get; set; }
        public DbSet<Phones> Phones { get; set; }
    }

Контроллер и действие для добавления телефонов:

        [HttpPost]
        public ActionResult Create(FormCollection fc)
        {
            Phones phone= new Phones();
            phone.Model= fc["Model"];
            phone.Manufacturer= fc["Manufacturer"];

            UsersPhonesDBContext.Phones.Add(phone);

            int r = UsersPhonesDBContext.SaveChanges();

            if (r > 0)
                return RedirectToAction("Index", "Test");
            else
                return Redirect("~Views/Shared/Error.cshtml");
        }

и пользователей аналогичным образом.

А как насчет таблицы UsersPhones?

1 Ответ

0 голосов
/ 14 января 2019

Вы добавляете телефоны без пользователей или пользователей без телефонов, тогда в реляционной таблице UsersPhones нет данных.

Если вы хотите, чтобы данные были в этой таблице, вам нужно связать пользователя с телефоном: например:

[HttpPost]
public ActionResult CreateUserWithPhone(FormCollection fc)
{
    ...
    using (var context = new UsersPhonesDBContext())
    {
        var user= new Users { Name = "testName" };
        context.Users.Add(user);

        var phone = new Phones{ Model= "testModel" };
        context.Phones.Add(phone);

        user.Phones = new List<Phones>();
        user.Phones.Add(phone);

        context.SaveChanges();
    }
    ...
}

Этот код создаст строку в таблице Users, строку в таблице Phones и строку в таблице UsersPhones.

- EDIT -

Я создал консольный проект для его тестирования с вашими классами (Телефоны, Пользователи и UsersPhonesDBContext), и это Program.cs:

class Program
{
    static void Main(string[] args)
    {
        using (var context = new UsersPhonesDBContext())
        {
            var user = new Users { Name = "testName" };
            context.Users.Add(user);

            var phone = new Phones { Model = "testModel" };
            context.Phones.Add(phone);

            user.Phones = new List<Phones>();
            user.Phones.Add(phone);

            context.SaveChanges();
        }
    }
}

После выполнения программы она создала строку в таблице Users, таблице Phones и таблице UsersPhones:

enter image description here

...