EF Core, связанная с ними, не сохраненаC#

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

Сообщение Anonymous »

У меня есть настройка EF Core, где в классе у меня есть навигационное свойство. Насколько я могу судить, я следовал примерам от Microsoft до точки, однако моя добавленная сущность не сохраняется. /> После большого количества копаний в течение последних нескольких дней я обнаружил, что, хотя dbcontext < /code> идентифицирует поле свойства навигации как модифицированное, он не идентифицирует агрегатный корень, как идентифицировано. Я подозреваю, что из -за этого корень совокупности не обновляется, и мой savechangesasync не удается молча. Я полностью застрял в том, что я делаю неправильно на данный момент. В этом классе у меня есть список категорий, который создан с частным полем поддержки и публичной IradonlyCollection , идущий по примерам из репозиториев Ardalis.

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

public class DataSheet: Aggregate
{
private readonly List _categories = new();
public IReadOnlyCollection Categories => _categories.AsReadOnly();

// .... more code here

public void CreateCategory(string name)
{
var orderIndex = (uint)_categories.Count;
var category = new Category(name);

_categories.Add(category);
}
}
Категория класс - это объект, который принадлежит к лицу DataShip и имеет простую структуру:

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

public class Category: Entity
{
public string Name { get; init; }

private Category() { }

public Category(string name): base(Guid.NewGuid())
{
Name = name;
}
}
< /code>
Я установил режим доступа к навигации в поле, как в документации Microsoft: < /p>
public class DataSheetConfiguration: IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(b => b.Id);

var categoryNavigation = builder.Metadata.FindNavigation(nameof(DataSheet.Categories));
categoryNavigation.SetPropertyAccessMode(PropertyAccessMode.Field);
}
}
и CategoryConfiguration :

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

public class CategoryConfiguration: IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(c => c.Id);
builder.Property(c => c.Name);
}
}
Затем в моем данных dataContext я добавляю эти конфигурации:

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

public class DataContext : IdentityDbContext
{
// ... other DbSets
public DbSet DataSheets { get; set; } = null!;
public DbSet Categories { get; set; } = null!;

public DataContext() { }
public DataContext(DbContextOptions options) : base(options)
{
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.ApplyConfiguration(new DataSheetConfiguration());
modelBuilder.ApplyConfiguration(new CategoryConfiguration());
}
}
Теперь, на уровне моего приложения, когда я пытаюсь добавить новую категорию, используя функцию репозитория Savechangesasync , я получаю ошибку, говоря, что ожидается, что 1 строка будет затронут, но в реальности 0 рядов были затронуты.

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

var spec = new CompleteDataSheet(request.DataSheetId);

var sheet = await _dataSheetService.GetAsync(spec, cancellationToken);
sheet.CreateCategory(request.Name);

await _dataSheetService.UpdateAsync(sheet, cancellationToken);

public sealed class CompleteDataSheet: Specification
{
public CompleteDataSheet(Guid id)
{
Query
.Where(b => b.Id == id)
.Include(b => b.Categories);
}
}
Здесь спецификация определяется для получения таблицы данных по идентификатору и включить элементы категорий . GetAsync преуспевает в получении листа, а список категорий пуст. После вызова CreateCategory новый элемент показывает в списке категорий . Чтобы сохранить мои изменения, я затем вызову функцию updateAsync , которая использует репозиторий, чтобы сохранить изменения. here" src="https://i.sstatic.net/A29UUCS8.png" />
Изображение

After a lot of digging, I found that while the Categories Поле в DBContext имеет состояние «Изменено», объект DataShiet имеет состояние неизменного. Когда я насильственно устанавливаю все элементы в категориях в состояние «добавленного», итерация над ним и программно изменяя состояние, то новые элементы сохраняются. Это, однако, не является решением с точки зрения дизайна.
Ранее у меня была нормальная работа навигационного свойства, однако в этом случае использование все элементы в списке были инициализированы по инициализации сущности, и они только обновлялись, а не добавляли новые случаи. Сохраняйте их?

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

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

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

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

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

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

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