Я читаю книгу C#12 в двух словах. Автор говорит: < /p>
Загрузка навигационных свойств < /p>
< /blockquote>
Когда EF Core населяет объект, это
не (по умолчанию) заполняет свои навигационные свойства: < /p>
не заполняет свои навигационные свойства: < /p>
не заполняет свои навигационные свойства: < /p>
не (по умолчанию) заполняет навигацию: < /p>
not (по умолчанию).using var dbContext = new NutshellContext();
var cust = dbContext.Customers.First();
Console.WriteLine(cust.Purchases.Count); // Always 0
< /code>
< /blockquote>
Однако я написал немного MRE, чтобы проверить это и не могу воспроизвести. CUST.CORCHASES.COUNT возвращает мне фактическое значение. Я делаю что-то не так?using Microsoft.EntityFrameworkCore;
var dbPath = "demo.db";
if (System.IO.File.Exists(dbPath)) System.IO.File.Delete(dbPath);
using var db = new NutshellContext(dbPath);
db.Database.EnsureCreated();
var c1 = new Customer { Name = "A" };
var c2 = new Customer { Name = "B" };
db.Customers.AddRange(c1, c2);
db.SaveChanges();
db.Purchases.AddRange(
new Purchase { CustomerId = c1.Id, Sku = "BOOK-001", Price = 29.99m },
new Purchase { CustomerId = c1.Id, Sku = "MUG-007", Price = 9.50m },
new Purchase { CustomerId = c2.Id, Sku = "SHIRT-42", Price = 19.00m },
new Purchase { CustomerId = c2.Id, Sku = "USB-KEY", Price = 8.99m },
new Purchase { CustomerId = c2.Id, Sku = "BOOK-002", Price = 24.99m }
);
db.SaveChanges();
var cust1 = db.Customers.First();
Console.WriteLine($"Customer #{cust1.Id} name: {cust1.Name}");
Console.WriteLine($"Purchases.Count WITHOUT Include: {cust1.Purchases.Count} (expected 0 but I get 2)");
public class Customer
{
public int Id { get; set; }
public string Name { get; set; } = "";
public ICollection Purchases { get; set; } = new List();
}
public class Purchase
{
public int Id { get; set; }
public string Sku { get; set; } = "";
public decimal Price { get; set; }
// FK + navigation back to Customer
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
public class NutshellContext : DbContext
{
private readonly string _dbPath;
public NutshellContext(string dbPath) => _dbPath = dbPath;
public DbSet Customers => Set();
public DbSet Purchases => Set();
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite($"Data Source={_dbPath}");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(c => c.Purchases)
.WithOne(p => p.Customer)
.HasForeignKey(p => p.CustomerId);
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-shouldnt
EF Core заполняет свою навигацию, хотя не должно ⇐ C#
Место общения программистов C#
-
Anonymous
1759227037
Anonymous
Я читаю книгу C#12 в двух словах. Автор говорит: < /p>
Загрузка навигационных свойств < /p>
< /blockquote>
Когда EF Core населяет объект, это
не (по умолчанию) заполняет свои навигационные свойства: < /p>
не заполняет свои навигационные свойства: < /p>
не заполняет свои навигационные свойства: < /p>
не (по умолчанию) заполняет навигацию: < /p>
not (по умолчанию).using var dbContext = new NutshellContext();
var cust = dbContext.Customers.First();
Console.WriteLine(cust.Purchases.Count); // Always 0
< /code>
< /blockquote>
Однако я написал немного MRE, чтобы проверить это и не могу воспроизвести. CUST.CORCHASES.COUNT возвращает мне фактическое значение. Я делаю что-то не так?using Microsoft.EntityFrameworkCore;
var dbPath = "demo.db";
if (System.IO.File.Exists(dbPath)) System.IO.File.Delete(dbPath);
using var db = new NutshellContext(dbPath);
db.Database.EnsureCreated();
var c1 = new Customer { Name = "A" };
var c2 = new Customer { Name = "B" };
db.Customers.AddRange(c1, c2);
db.SaveChanges();
db.Purchases.AddRange(
new Purchase { CustomerId = c1.Id, Sku = "BOOK-001", Price = 29.99m },
new Purchase { CustomerId = c1.Id, Sku = "MUG-007", Price = 9.50m },
new Purchase { CustomerId = c2.Id, Sku = "SHIRT-42", Price = 19.00m },
new Purchase { CustomerId = c2.Id, Sku = "USB-KEY", Price = 8.99m },
new Purchase { CustomerId = c2.Id, Sku = "BOOK-002", Price = 24.99m }
);
db.SaveChanges();
var cust1 = db.Customers.First();
Console.WriteLine($"Customer #{cust1.Id} name: {cust1.Name}");
Console.WriteLine($"Purchases.Count WITHOUT Include: {cust1.Purchases.Count} (expected 0 but I get 2)");
public class Customer
{
public int Id { get; set; }
public string Name { get; set; } = "";
public ICollection Purchases { get; set; } = new List();
}
public class Purchase
{
public int Id { get; set; }
public string Sku { get; set; } = "";
public decimal Price { get; set; }
// FK + navigation back to Customer
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
public class NutshellContext : DbContext
{
private readonly string _dbPath;
public NutshellContext(string dbPath) => _dbPath = dbPath;
public DbSet Customers => Set();
public DbSet Purchases => Set();
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite($"Data Source={_dbPath}");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(c => c.Purchases)
.WithOne(p => p.Customer)
.HasForeignKey(p => p.CustomerId);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79778964/ef-core-populating-its-navigation-although-it-shouldnt[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия