EF Core 2.2 - не работает вставка нового объекта со ссылкой на существующий
От: LandWarrior  
Дата: 26.07.20 23:15
Оценка:
Вот мои POC объекты:

[Table]
    public class Product
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }

        public List<CategoryProduct> CategoryProducts { get; set; }
    }

    public class CategoryProduct
    {
        public int CategoryId { get; set; }
        public int ProductId { get; set; }
        
        public Category Category { get; set; }
        public Product Product { get; set; }
    }


    [Table]
    public class Category
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }

        public List<CategoryProduct> CategoryProducts { get; set; }
    }


Вот код вставки:


        public async Task CreateProduct(Product dto)
        {
                await ctx.Products.AddAsync(dto);
                await ctx.SaveChangesAsync();
        }



В вещ передаю объект Product , сделаный из такого JSON :

{
            "id": 0,
            "name": "Gräff Stettin",
            "categoryProducts": [{
                    "categoryId": 1,
                    "productId": 1,
                    "category": {
                        "id": 1,
                        "name": "Drinks"
                    }
                }, {
                    "categoryId": 2,
                    "productId": 1,
                    "category": {
                        "id": 2,
                        "name": "Alcohol"
                    }
                }
            ]
        }


И что вижу при трассировке запросов — что он с какого-то перепугу лепит вставку существующей Category:
INSERT INTO "Category" ("Id", "Name")
VALUES (@p0, @p1);



Как мне сделать так, чтобы вставки категории не было при ее существовании с таким categoryId?
Re: EF Core 2.2 - не работает вставка нового объекта со ссылкой на существующий
От: varenikAA  
Дата: 27.07.20 01:16
Оценка:
Здравствуйте, LandWarrior, Вы писали:

LW>Вот мои POC объекты:



LW>Как мне сделать так, чтобы вставки категории не было при ее существовании с таким categoryId?

Найти по Id Category. if not found then insert else update
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: EF Core 2.2 - не работает вставка нового объекта со ссылкой на существующ
От: LandWarrior  
Дата: 27.07.20 06:44
Оценка:
LW>>Как мне сделать так, чтобы вставки категории не было при ее существовании с таким categoryId?
AA>Найти по Id Category. if not found then insert else update

А без ручного поиска, одними средствами EF (атрибуты какие, методы и т.д.) можно такое проделать?
Re[3]: EF Core 2.2 - не работает вставка нового объекта со ссылкой на существующ
От: varenikAA  
Дата: 27.07.20 08:38
Оценка:
Здравствуйте, LandWarrior, Вы писали:

LW>>>Как мне сделать так, чтобы вставки категории не было при ее существовании с таким categoryId?

AA>>Найти по Id Category. if not found then insert else update

LW>А без ручного поиска, одними средствами EF (атрибуты какие, методы и т.д.) можно такое проделать?


c EF работал мало, там все крутится вокруг контекста, по идее, если Id генерируется базой, ef должен проверять перед записью данные.
Может быть так?

context.Entry(person).State = EntityState.Modified
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: EF Core 2.2 - не работает вставка нового объекта со ссылкой на существующ
От: LandWarrior  
Дата: 27.07.20 09:09
Оценка:
LW>>>>Как мне сделать так, чтобы вставки категории не было при ее существовании с таким categoryId?
AA>>>Найти по Id Category. if not found then insert else update

LW>>А без ручного поиска, одними средствами EF (атрибуты какие, методы и т.д.) можно такое проделать?


AA>c EF работал мало, там все крутится вокруг контекста, по идее, если Id генерируется базой, ef должен проверять перед записью данные.

AA>Может быть так?

AA>
AA>context.Entry(person).State = EntityState.Modified
AA>



У меня person точно не Modified. Он как раз свежий, еще не добавлявшийся ранее.
Re[5]: EF Core 2.2 - не работает вставка нового объекта со ссылкой на существующ
От: varenikAA  
Дата: 27.07.20 13:14
Оценка:
Здравствуйте, LandWarrior, Вы писали:


LW>>>>>Как мне сделать так, чтобы вставки категории не было при ее существовании с таким categoryId?

AA>>>>Найти по Id Category. if not found then insert else update

LW>>>А без ручного поиска, одними средствами EF (атрибуты какие, методы и т.д.) можно такое проделать?


AA>>c EF работал мало, там все крутится вокруг контекста, по идее, если Id генерируется базой, ef должен проверять перед записью данные.

AA>>Может быть так?

AA>>
AA>>context.Entry(person).State = EntityState.Modified
AA>>



LW>У меня person точно не Modified. Он как раз свежий, еще не добавлявшийся ранее.


Ну значит его надо аттачить, а категорию State = EntityState.Modified
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.