Я использую поставщика ядра 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
MongoDB EF Core Provider создает дублирующие элементы сбора во время загрузки корневого объекта ⇐ C#
Место общения программистов C#
1739360672
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.
Подробнее здесь: [url]https://stackoverflow.com/questions/78439552/mongodb-ef-core-provider-creates-duplicate-collection-items-during-loading-of-ro[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия