我们的 ASP.NET C# Web 应用程序用于以下环境 .NET Framework 4
ASP.NET Web 窗体。
IIS 7
视窗 2008
视觉工作室 2010
.NET IDE C#
HTTPS ( SSL )
-实体框架5
在我们的应用程序中,我们有以下表格。
1) 学习车
2) EnrollmentEntriesInLearningCarts
3) 报名入口
4) 教程
5) aspnet_Users
LearningCart 和 EnrollmentEntry 表(具有 EnrollmentEntriesInLearningCarts 桥接表)之间存在多对多关系
LearningCart 和 EnrollmentEntry 表之间的多对多关系如下图所示:
此外,我还确保 EnrollmentEntriesInLearningCarts 桥表中已经包含数据:
namespace PerlsData.Domain
{
using System;
using System.Collections.Generic;
public partial class LearningCart
{
public LearningCart()
{
}
public virtual System.Guid LearningCartsDatabaseId { get; set; }
public virtual short Type { get; set; }
public virtual short Status { get; set; }
public virtual string LearningCartsName { get; set; }
public virtual Nullable<System.Guid> Creator { get; set; }
public virtual Nullable<System.Guid> TeamLead { get; set; }
public virtual Nullable<short> isSubmitted { get; set; }
public virtual Nullable<short> isRemoved { get; set; }
public virtual Nullable<System.DateTime> DateSharedWithInstructor { get; set; }
public virtual ICollection<EnrollmentEntry> associatedEnrollmentEntry { get; set; }
}
}
namespace PerlsData.Domain
{
using System;
using System.Collections.Generic;
public partial class EnrollmentEntry
{
public EnrollmentEntry()
{
}
public virtual System.Guid EnrollmentEntryDatabaseID { get; set; }
public virtual System.Guid UserId { get; set; }
public virtual System.Guid TutorialDatabaseID { get; set; }
public virtual aspnet_Users aspnet_Users { get; set; }
public virtual Tutorial Tutorial { get; set; }
public virtual ICollection<LearningCart> associatedLearningCart { get; set; }
}
}
namespace PerlsData.Domain
{
using System;
using System.Collections.Generic;
public partial class aspnet_Users
{
public aspnet_Users()
{
}
public System.Guid ApplicationId { get; set; }
public System.Guid UserId { get; set; }
public string UserName { get; set; }
public string LoweredUserName { get; set; }
public string MobileAlias { get; set; }
public bool IsAnonymous { get; set; }
public System.DateTime LastActivityDate { get; set; }
}
}
namespace PerlsData.Domain
{
using System;
using System.Collections.Generic;
public partial class Tutorial
{
public Tutorial()
{
}
public virtual System.Guid TutorialDatabaseID { get; set; }
public virtual string TutorialCode { get; set; }
public virtual System.Guid SectionDatabaseID { get; set; }
public virtual System.Guid UserId { get; set; }
public virtual aspnet_Users aspnet_Users { get; set; }
public virtual ICollection<EnrollmentEntry> EnrollmentEntries { get; set; }
public virtual Section Section { get; set; }
}
}
namespace PerlsData
{
public class Context : System.Data.Entity.DbContext
{
public DbSet<PerlsData.Domain.EnrollmentEntry> EnrollmentEntries { get; set; }
public DbSet<PerlsData.Domain.LearningCart> LearningCarts { get; set; }
public Context()
: base("Name=LocalSqlServer")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PerlsData.Domain.LearningCart>().ToTable("LearningCarts", schemaName: "dbo");
modelBuilder.Entity<PerlsData.Domain.LearningCart>().HasKey(t => t.LearningCartsDatabaseId);
modelBuilder.Entity<PerlsData.Domain.LearningCart>().Property(t => t.LearningCartsDatabaseId)
.HasColumnName("LearningCartsDatabaseId")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<PerlsData.Domain.LearningCart>().HasMany(learnC => learnC.associatedEnrollmentEntry)
.WithMany(enEnt => enEnt.associatedLearningCart)
.Map(
m =>
{
m.ToTable("EnrollmentEntriesInLearningCarts", schemaName: "dbo");
m.MapLeftKey("LearningCartsDatabaseId");
m.MapRightKey("EnrollmentEntryDatabaseID");
}
);
modelBuilder.Entity<PerlsData.Domain.EnrollmentEntry> ().ToTable("EnrollmentEntry", schemaName: "dbo");
modelBuilder.Entity<PerlsData.Domain.EnrollmentEntry>().HasKey(e => e.EnrollmentEntryDatabaseID);
modelBuilder.Entity<PerlsData.Domain.EnrollmentEntry>().Property(t => t.EnrollmentEntryDatabaseID)
.HasColumnName("EnrollmentEntryDatabaseID")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<PerlsData.Domain.EnrollmentEntry>().Property(t => t.TutorialDatabaseID)
.HasColumnName("TutorialDatabaseID");
modelBuilder.Entity<PerlsData.Domain.EnrollmentEntry>().HasMany(enEnt => enEnt.associatedLearningCart)
.WithMany(learnC => learnC.associatedEnrollmentEntry)
.Map(
m =>
{
m.ToTable("EnrollmentEntriesInLearningCarts", schemaName: "dbo");
m.MapLeftKey("EnrollmentEntryDatabaseID");
m.MapRightKey("LearningCartsDatabaseId");
}
);
modelBuilder.Entity<PerlsData.Domain.aspnet_Users>().ToTable("aspnet_Users", schemaName: "dbo");
modelBuilder.Entity<PerlsData.Domain.aspnet_Users>()
.Property(au => au.UserId)
.HasColumnName("UserId");
modelBuilder.Entity<PerlsData.Domain.aspnet_Users>()
.HasKey(au => au.UserId);
modelBuilder.Entity<PerlsData.Domain.aspnet_Users>()
.Property(au => au.UserName)
.HasColumnName("UserName");
modelBuilder.Entity<PerlsData.Domain.Tutorial>().ToTable("Tutorial", schemaName: "dbo");
modelBuilder.Entity<PerlsData.Domain.Tutorial>().Property(t => t.TutorialDatabaseID)
.HasColumnName("TutorialDatabaseID")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<PerlsData.Domain.Tutorial>()..HasKey(t => t.TutorialDatabaseID);
modelBuilder.Entity<PerlsData.Domain.Tutorial>().HasRequired(x => x.Section)
.WithMany(x => x.Tutorials)
.HasForeignKey(x => x.SectionDatabaseID);
}
}
}
这是代码无法检索信息的地方:
public LearningCart getLearningCartAssociatedWithLoggedInStudentsTutorial(Guid userOfInterestGuid, Guid tutorialOfInterestGuid){
LearningCart learningCartsAssociatedWithLoggedInStudentTutorial = new LearningCart();
EnrollmentEntry enrollmentEntryAssociatedWithLoggedInStudentTutorial = new EnrollmentEntry();
LearningCart learnCartOfInterest = null;
IQueryable<LearningCart> learnCartIQueryable = null;
EnrollmentEntry enrEntOfInterest = null;
using (PerlsData.Context context = new PerlsData.Context())
{
context.Configuration.LazyLoadingEnabled = true;
context.Configuration.ProxyCreationEnabled = true;
IQueryable<EnrollmentEntry> enrollmentEntryOfInterestIQueryable =
context.EnrollmentEntries.Where(ee =>
ee.aspnet_Users.UserId == userOfInterestGuid
&& ee.Tutorial.TutorialDatabaseID == tutorialOfInterestGuid);
foreach (EnrollmentEntry enrEnt in enrollmentEntryOfInterestIQueryable)
{
enrEntOfInterest = enrEnt;
}
learnCartIQueryable = context.LearningCarts.Where(lc =>
lc.associatedEnr ollmentEntry.Any(ee =>
ee.EnrollmentEntryDatabaseID == enrEntOfInterest.EnrollmentEntryDatabaseID));
foreach (LearningCart lc in learnCartIQueryable)
{
learnCartOfInterest = lc;
}
context.Entry(learnCartOfInterest).State = System.Data.EntityState.Detached;
}
return learnCartOfInterest;
}
问题来自于试图找出一个特定的 LearningCart 模块。我尝试检索 LearningCart,并将其放在 IQueryable 对象中:
IQueryable<LearningCart> learnCartIQueryable = context.LearningCarts.Where(lc =>
lc.associatedEnrollmentEntry.Any(ee =>
ee.EnrollmentEntryDatabaseID == enrEntOfInterest.EnrollmentEntryDatabaseID));
使用 Visual Studio 2010,我将 learnCartIQueryable 放在“添加观察”下,我得到“枚举没有结果”
我已经在 EnrollmentEntriesInLearningCarts 桥接表中有数据。
为什么实体框架无法检索 EnrollmentEntriesInLearningCarts 桥表中的数据,并且只给出错误“枚举未产生结果”?