EntityFramework Core en til mange
Hej EksperterJeg er igang med og prøve det nye EntityFramework Core (tidligere kaldt 7.0)
Hvor jeg har brug for en HasOne().WithMany() og dens reverse HasOne().WithMany()
det handler om mine Set som ser sådan her ud.
Account.cs
public class Account
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]public int AccountId { get; set; }
public string Email { get; set; }
public byte[] PasswordSha1 { get; set; }
public byte[] Salt { get; set; }
public virtual List<Activation> Activations { get; set; } = new List<Activation>();
}
Activation.cs
public class Activation
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]public int ActivationId { get; set; }
public int AccountId { get; set; }
public string ActivationCode { get; set; }
public DateTime? Validated { get; set; }
public DateTime Created { get; set; } = DateTime.UtcNow;
public Account Account { get; set; }
public string Status { get; set; }
}
min ContextDB ser sådan her ud.
public class AccountsContext : DbContext
{
static RandomNumberGenerator Random = RandomNumberGenerator.Create();
public DbSet<Account> Accounts { get; set; }
public DbSet<Activation> Activations { get; set; }
public AccountsContext(DbContextOptions<AccountsContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Account>()
.HasIndex(u => u.Email)
.IsUnique();
builder.Entity<Account>()
.HasMany(account => account.Activations)
.WithOne(activation => activation.Account);
builder.Entity<Activation>()
.HasOne(activation => activation.Account)
.WithMany(account => account.Activations);
}
}
Jeg kan let nok bruge Accounts.Where(a => a.AccountId == 1).FirstOrDefault().Activations
men når jeg prøver og bruge Activations-Where(a => a.Account.AccountId == 1).FirstOrDefault().Activations
giver den null i Activation->Account objektet.
jeg ved godt at sætningerne ikke giver mening, men er kun et eksempel.
hvorfor er Account Null i Activations? databasen er sat op korrekt,
Activations entity bruger AccountId til og finde Accounts entity
Accounts key er AccountId
Activations key er ActivationId
på forhånd tak :)