ho 2 classi semplici:Entity proprietà di navigazione quadro è nullo
public class Setting
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid SettingId { get; set; }
[Required]
public String Name { get; set; }
public String Value { get; set; }
[Required]
public SettingCategory SettingCategory { get; set; }
}
public class SettingCategory
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid SettingCategoryId { get; set; }
[Required]
public String Value { get; set; }
public ICollection<Setting> Settings { get; set; }
}
Quando ho recuperare un SettingCategory
dal database delle impostazioni di raccolta è sempre nullo.
Quando faccio un virtual
allora si dirà: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Come posso accedere alla mia lista Settings
?
Il contrario funziona, se si recupera un Setting
dal database, la proprietà SettingCategory
viene riempita.
Questa è la mia prima sceneggiatura code-migrazioni:
CreateTable(
"dbo.Settings",
c => new
{
SettingId = c.Guid(nullable: false, identity: true),
Name = c.String(nullable: false),
Value = c.String(),
SettingCategory_SettingCategoryId = c.Guid(nullable: false),
})
.PrimaryKey(t => t.SettingId)
.ForeignKey("dbo.SettingCategories", t => t.SettingCategory_SettingCategoryId, cascadeDelete: true)
.Index(t => t.SettingCategory_SettingCategoryId);
CreateTable(
"dbo.SettingCategories",
c => new
{
SettingCategoryId = c.Guid(nullable: false, identity: true),
Value = c.String(nullable: false),
})
.PrimaryKey(t => t.SettingCategoryId);
E questa è la parte che ottiene dal database:
public SettingCategory Get(Guid settingCategoryId)
{
using (var context = new BackofficeContext())
{
return context
.SettingCategories
.FirstOrDefault(s => s.SettingCategoryId == settingCategoryId);
}
}
risposta
ho dimenticato l'inclusione in .SettingCategories
, ma lo stavo provando con una lambda:
public SettingCategory Get(Guid settingCategoryId)
{
using (var context = new BackofficeContext())
{
return context
.SettingCategories
.Include(s => s.Settings)
.FirstOrDefault(s => s.SettingCategoryId == settingCategoryId);
}
}
che non funziona, ma questo fa:
public SettingCategory Get(Guid settingCategoryId)
{
using (var context = new BackofficeContext())
{
return context
.SettingCategories
.Include("Settings")
.FirstOrDefault(s => s.SettingCategoryId == settingCategoryId);
}
}
Questo è strano. Puoi mostrare come stai recuperando SettingCategory? – Anri
Sei sicuro di avere impostazioni correlate nel tuo database? – Anri
Sto usando il codice prima con le migrazioni, quindi dovrebbe fare tutto bene? Ho aggiunto il mio script iniziale. – YesMan85