EF Core добавляет объект обнуляет свойство навигации

Я пытаюсь добавить объект Drink через DbContext, но после добавления напитка с использованием контекста свойство Brand становится пустым. Что может быть причиной этого?

(Игнорировать метод двойного добавления _context, был отладкой)

Перед добавлением напитка Перед добавлением напитка После добавления напитка После добавления напитка

Модели:

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

public class Drink : Product
{
    public Brand Brand { get; set; }
    public Category Category { get; set; }
    public ICollection<DrinkTag> DrinkTags { get; set; }
}


public class Brand
{
    [Key]
    public string Name { get; set; }

    public ICollection<Drink> Drinks { get; set; }
}

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

    public ICollection<Drink> Drinks { get; set; }
}

public class Tag
{
    [Key]
    public string Name { get; set; }

    public ICollection<Drink> Drinks { get; set; }
}

public class DrinkTag
{
    public string DrinkId { get; set; }
    public Drink Drink { get; set; }
    public string TagId { get; set; }
    public Tag Tag { get; set; }
}

1 ответ

Решение

Ваша модель напитка:

public class Drink : Product
{
    public int BrandId { get; set; }

    // Navigational properties
    public Brand Brand { get; set; }
    public Category Category { get; set; }
    public ICollection<DrinkTag> DrinkTags { get; set; }
}

Когда вы добавляете новый напиток, укажите только BrandId:

var myDrink = new Drink();
myDrink.BrandId = 2;
// ... and so on

Кроме того, EF Core не загружает связанные свойства автоматически. Поэтому, если вы хотите, чтобы бренд был загружен, вам нужно сделать это вручную:

var data = myContext.Drinks
    .Include(p => p.Brand)
    .FirstOrDefault(p => p.Id == yourId);
Другие вопросы по тегам