EF Core заполняет свою навигацию, хотя не должноC#

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

Сообщение 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);
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... t-shouldnt
Ответить

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

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

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

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

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