arabiriminden erişildiğinde sorguda istisna atar DbContext sınıfımın uyguladığı bir arabirim oluşturdum, bu, birim sınaması için sahte bir db içeriği oluşturmama olanak sağlıyor. Ancak benim DBContext doğrudan tam aynı sorgu yürütülürken,DbContext,
Unable to create a constant value of type 'DemoApp.Member'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.
arayüz üzerinden LINQ sorgusu yürütme yukarıdaki istisna atar: Bu aşağıdaki özel durum alıyorum birini, benim LINQ bugüne kadar sorgular herkes için iyi çalışıyor ama sorgu% 100 çalışır.
interface IDemoContext : IDisposable
{
IDbSet<Member> Members { get; set; }
IDbSet<Team> Teams { get; set; }
}
public partial class DemoContext : DbContext, IDemoContext
{
public DemoContext() : base("name=DemoContext"){}
public IDbSet<Member> Members { get; set; }
public IDbSet<Team> Teams { get; set; }
}
public partial class Member
{
public Member()
{
this.SecondaryTeams = new HashSet<Team>();
}
public int ID { get; set; }
public string Name { get; set; }
public int? PrimaryTeamID { get; set; }
public virtual Team PrimaryTeam { get; set; }
public virtual ICollection<Team> SecondaryTeams { get; set; }
}
public partial class Team
{
public Team()
{
this.PrimaryMembers = new HashSet<Member>();
this.SecondaryMembers = new HashSet<Member>();
}
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Member> PrimaryMembers { get; set; }
public virtual ICollection<Member> SecondaryMembers { get; set; }
}
Her üye potansiyel ait tek bir birincil ekibine ve isteğe bağlı birçok ikincil takımlar: Burada arayüz ve ilgili demo kod tanımları olduğunu.
using (IDemoContext dbi = new DemoContext())
{
var members =
(from member in dbi.Members
select new
{
Name = member.Name,
Team = member.PrimaryTeam.Name,
SecondaryTeams = from secondaryTeam in member.SecondaryTeams
join primaryMember in dbi.Members
on secondaryTeam.ID equals primaryMember.PrimaryTeamID
into secondaryTeamMembers
select new
{
Name = secondaryTeam.Name,
Count = secondaryTeamMembers.Count()
}
}).ToList();
}
Ben ilk satırı değiştirirseniz:
using (DemoContext dbi = new DemoContext())
sonra sorgu mükemmel yürütür Aşağıdaki demo kod istisna atar.
Yani benim sorular şunlardır:
- Neden DemoContext aracılığıyla çalışmak ve IDemoContext etmiyor?
- IDemoContext'i nasıl değiştiririm, bu nedenle bu sorgu arabirimde çalışır?
artık yeni istisna atar Bu değişiklikle birlikte:
– Beyers@Beyers Temel olarak 'üye grubu' IQueryable 'türünde olmalıdır. Güncelleme yanıtı. –
Eranga
Başar, bu% 100 çalışır ve dbi.Members.Include (i => i.SecondaryTeams) ile benim geçici çözümümden daha iyi bir çözümdür. DBContext üzerinden değil, neden arayüzden geçtiğini tam olarak bilmek istiyoruz. – Beyers