MongoDB EF Core Provider создает дублирующие элементы сбора во время загрузки корневого объектаC#

Место общения программистов C#
Ответить
Anonymous
 MongoDB EF Core Provider создает дублирующие элементы сбора во время загрузки корневого объекта

Сообщение Anonymous »

Я использую поставщика ядра MongoDB EF и получаю дубликаты для встроенных коллекций сложных объектов, когда я загружаю корневой объект. Я заметил это с последней версией 8.0 и предыдущей 7.0.0-Preview.1. Я использую .net8. Это мой файл .proj: < /p>


Exe
net8.0
enable
enable






< /code>
Вот пример, который запускает ошибку: < /p>
using Microsoft.EntityFrameworkCore;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.EntityFrameworkCore.Extensions;

var connectionString = Environment.GetEnvironmentVariable("MONGODB_URL");
var client = new MongoClient(connectionString);
var db = MflixDbContext.Create(client.GetDatabase("sample"));

var movie1 = new Movie();
movie1._id = ObjectId.GenerateNewId();
movie1.title = "Movie 1";
movie1.actors.Add(new Actor() { FirstName = "John", LastName = "Smith" });
movie1.actors.Add(new Actor() { FirstName = "Mary", LastName = "Smith" });
db.Movies.Add(movie1);
Console.WriteLine("Total actors going to the database: " + movie1.actors.Count());
db.SaveChanges();

var movieFromDb = db.Movies.FirstOrDefault(x => x._id == movie1._id);
Console.WriteLine("Movie: " + movieFromDb.title);
Console.WriteLine("Total actors after loading from database: " + movieFromDb.actors.Count());

internal class MflixDbContext : DbContext
{
public DbSet Movies { get; init; }
public static MflixDbContext Create(IMongoDatabase database) =>
new(new DbContextOptionsBuilder()
.UseMongoDB(database.Client, database.DatabaseNamespace.DatabaseName)
.Options);
public MflixDbContext(DbContextOptions options)
: base(options) {}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity().ToCollection("movies");
}
}

internal class Actor
{
public string FirstName { get; set;}
public string LastName { get; set;}
}

internal class Movie
{
public ObjectId _id { get; set; }
public string title { get; set; }
public List actors { get; set; } = new List();
}
< /code>
, если вы запустите, вы получите следующий вывод: < /p>

Общая сумма актеров, переходящих в базу данных: 2

фильм: фильм 1

Total Actors после загрузки из базы данных: 4 < /p>
< /blockquote>
Если вы посмотрите на Коллекция «фильмы» в MongoDB, вы не найдете дубликатов: < /p>
sample> db.movies.find()
[
{
_id: ObjectId('66396aa29571e499f39d6fab'),
title: 'Movie 1',
actors: [
{ FirstName: 'John', LastName: 'Smith' },
{ FirstName: 'Mary', LastName: 'Smith' }
]
}
]
< /code>
Надеюсь, я сделаю что -то не так, потому что это довольно большая ошибка, которую нужно выпустить. В то время как 7.0.0 был предварительным выпуском, 8.0 - это не выпуск предварительного просмотра, а общий выпуск. они. Я также опубликую это на форумах MongoDB.


Подробнее здесь: https://stackoverflow.com/questions/784 ... ding-of-ro
Ответить

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

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

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

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

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