我有以下實體:EF6不加載導航屬性
人1 --- * PersonAdresse * --- 1住址
當試圖加載者與PersonAdresses調用PersonRepository.GetPersonen(...)
我只得到Personen(含填寫ID,姓名,Vorname),但空PersonAdresse ...
我確信,有在數據庫中的個人條目在,爲人員和地址。
EF產生下面的SQL(一個簡單的SQL,沒有加入或任何東西):
exec sp_executesql N'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Vorname] AS [Vorname]
FROM [dbo].[Person] AS [Extent1]
WHERE (([Extent1].[Name] = @p__linq__0) OR (([Extent1].[Name] IS NULL) AND (@p__linq__0 IS NULL))) AND (([Extent1].[Vorname] = @p__linq__1) OR (([Extent1].[Vorname] IS NULL) AND (@p__linq__1 IS NULL)))',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'Mustermann',@p__linq__1=N'Max'
實體:
public partial class Person
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Person()
{
this.PersonAdresse = new HashSet<PersonAdresse>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Vorname { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<PersonAdresse> PersonAdresse { get; set; }
}
public partial class PersonAdresse
{
public int Id { get; set; }
public int PersonId { get; set; }
public int AdresseId { get; set; }
public virtual Adresse Adresse { get; set; }
public virtual Person Person { get; set; }
}
public partial class Adresse
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Adresse()
{
this.PersonAdresse = new HashSet<PersonAdresse>();
}
public int Id { get; set; }
public string Strasse { get; set; }
public string Ort { get; set; }
public int Plz { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<PersonAdresse> PersonAdresse { get; set; }
}
PersonRepository:
public ICollection<Person> GetPersonen(PersonQueryCriteria personQueryCriteria)
{
var query = this.Context.GetQuery<Person>()
.Include(q => q.PersonAdresse)
.Include($"{nameof(Person.PersonAdresse)}.{nameof(PersonAdresse.Adresse)}");
if (!string.IsNullOrEmpty(personQueryCriteria.NameFilter)) {
query = query.Where(p => p.Name == personQueryCriteria.NameFilter);
}
if (!string.IsNullOrEmpty(personQueryCriteria.VornameFilter))
{
query = query.Where(p => p.Vorname == personQueryCriteria.VornameFilter);
}
return query.ToList();
}
爲什麼做PersonAdresse儘管使用了0123,Adresse仍然沒有加載?
在此先感謝
EDIT1:GetQuery法的EF-上下文類:
public IQueryable<T> GetQuery<T>() where T : class
{
return (IQueryable<T>)this.Set(typeof(T)).AsQueryable();
}
什麼是'context.GetQuery <>'? – DavidG
我已經爲原始問題添加了GetQuery <>方法的代碼:) – xeraphim
那麼這是一個相當複雜的方式,只是做'返回這個。Set();':) –
DavidG