Вот мои 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?
Здравствуйте, 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
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. Он как раз свежий, еще не добавлявшийся ранее.
Здравствуйте, 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