Многие-ко-многим Entity Framework Core, как вставитьC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Многие-ко-многим Entity Framework Core, как вставить

Сообщение Anonymous »

На основе руководства MS: https://learn.microsoft.com/en-us/ef/co ... simple-key< /p>
Вот как мы определяем публикацию и тег, которые имеют отношение «многие-многие» друг к другу:

Код: Выделить всё

public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public ICollection Tags { get; set; }
}

public class Tag
{
public string TagId { get; set; }
public ICollection
 Posts { get; set; }
}
Когда я запускаю обновление базы данных, оно смогло сгенерировать три таблицы: Post, Tag и PostTag, которые имеют первичный ключ [PostId, TagId]. В целом схема базы данных соответствует моему мнению.
Однако не упомянуто, как вставить сообщение со связью с тегами или наоборот.< /p>

Код: Выделить всё

db.Posts.Add(new Post { Title="Title1", Content="Content1"});
db.Posts.Add(new Post { Title="Title2", Content="Content2"});
db.Tags.Add(new Tag { TagId="Tag1"});
db.Tags.Add(new Tag { TagId="Tag2"});
db.SaveChanges();
Теперь в базе данных есть по 2 записи в каждой таблице. Мой вопрос: как мы можем добавить новое сообщение с тегом 1 и тегом 2? Мой код ниже не работает. Может ли кто-нибудь указать, что было не так? Или мне нужно поступить по-старому, добавив третий объект PostTag?
Это мой код:

Код: Выделить всё

ICollection tags = new List {db.Tags.FirstOrDefault(i => i.TagId="Tag1"), db.Tags.FirstOrDefault(i => i.TagId="Tag2")};
db.Posts.Add(new Post { Title="Title3", Content="Content3", Tags=tags});

db.SaveChanges();
Я получил исключение, сообщающее, что он не может вставить post3 в базу данных.
Обновлено: спасибо всем за помощь. Обнаружил, что допустил ошибку в своем реальном коде. Это мой настоящий код:

Код: Выделить всё

vICollection tags = new List {db.Tags.FirstOrDefault(i => i.TagId="Tag1"), db.Tags.FirstOrDefault(i => i.TagId="Tag2")};
var post3 = new Post { Title="Title3", Content="Content3"};
db.Posts.Add(post3);
post3.Tags = tags; // wrong position, should be called before db.Posts.Add(post3)
db.SaveChanges();
Ошибка: post3.Tags = tags; вызывается после db.Posts.Add(post3);. Должно быть так:

Код: Выделить всё

vICollection tags = new List {db.Tags.FirstOrDefault(i => i.TagId="Tag1"), db.Tags.FirstOrDefault(i => i.TagId="Tag2")};
var post3 = new Post { Title="Title3", Content="Content3"};
post3.Tags = tags; // correct position
db.Posts.Add(post3);
db.SaveChanges();
Я также удалил PostId из своего кода.

Подробнее здесь: https://stackoverflow.com/questions/660 ... -to-insert
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»