169 похожих чатов

Всем привет! Я немного забыл как там EF работает,

поэтому обращаюсь к вам.

Суть вопроса: создаю новую сущность для вставки в базу данных. В
Room
имеется свойство
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
и соединенное свойство с другой таблицей

public int? RoomPlayerId { get; set; }

[ForeignKey("RoomPlayerId")]
public virtual RoomPlayers RoomPlayers { get; set; }

Вопрос: можно ли делать так, как я хочу(на фото) и если да, то как в таком случае получить айдишним Room.


Сейчас делать так:
1. Создаю Room.
2. Добавляю через _repo.AddAsync() + _repo.SaveChangesAsync().
3. Создаю RoomPlayers
4. Добавляю через _repo.AddAsync() + _repo.SaveChangesAsync().
5. в Room, созданный в пункте 1 ассайню этот RoomPlayers и через Update апдейчу свойства

16 ответов

26 просмотров

Соединять не через ид а через объект целиком

Ihor-Volokhovych Автор вопроса
Влад Ого
Соединять не через ид а через объект целиком

То бишь просто создавать объедк в объедке без ассайна Id друг друга?

Ihor-Volokhovych Автор вопроса
Влад Ого
+

Понял, спассибо. Буду пробовать :)

Ihor Volokhovych
То бишь просто создавать объедк в объедке без асса...

В крайнем случае var room = new Room(); Var player = new Player(); player.Room = room;

Ihor Volokhovych
То бишь просто создавать объедк в объедке без асса...

А еще можешь кастомный сетер на проп RoomPlayers сделать шоб там внутри ставить this как связь

Ihor-Volokhovych Автор вопроса
Влад Ого
А еще можешь кастомный сетер на проп RoomPlayers с...

идея интересная, но не совсем понял как такое реализовать

AddAsync самостоятельно делает SaveChangesAsync. Эти методы AddAsync/UpdateAsync/etc не рекомендуется использовать, они созданы для обратной совместимости каких-то штук (в описании можешь найти подробнее инфу)

Ihor Volokhovych
То бишь просто создавать объедк в объедке без асса...

var c = new MyClass { InnerObject = new InnerClass... }; Главное чтобы InnerObject не имел заданного Id, иначе EF Core посчитает что он уже существует и попробует найти существующую запись

Ihor-Volokhovych Автор вопроса
Vova Lantsov 🇺🇦
AddAsync самостоятельно делает SaveChangesAsync. Э...

Нашел вот такое: This method is async only to allow special value generators, such as the one used by 'Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo', to access the database asynchronously. For all other cases the non async method should be used.

Ihor Volokhovych
Нашел вот такое: This method is async only to allo...

HiLo нормальная движуха для айдишников, но прихотливая может быт

Попробуй в обьекте Room { Id = Guid.NewGuid()} тогда вроде должно все работать как написано. Просто щас ты создание гуида отдаешь на БД, а тут генеришь сам. Лучше в коде генерить.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта