ASP.NET C# Web アプリケーションは、次の環境で使用されます。NET Framework 4
ASP.NET Web フォーム。
IIS7
Windows 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 ブリッジ テーブル内に既にデータがあります。
Entity Framework が EnrollmentEntriesInLearningCarts ブリッジ テーブルのデータを取得できず、「列挙によって結果が得られませんでした」というエラーのみが表示されるのはなぜですか?