UserClasses
、Screens
およびWorkflow
テーブルがあります。Workflow テーブルは、UserClasses テーブルと Screens テーブルの間の関連付けテーブルです。ここにそれらの構造があります...
UserClasses
- UserClassID (int PK)
- UserClass (string)
Screens
- ScreenID (int PK)
- ScreenName (string)
Workflow
- UserClassificationID
- ScreenID
UserClasses テーブルに次のデータがあります (ID と名前):
- 1 UserClassification1
- 2 UserClassification2
- 3 UserClassification3
- 4 UserClassification4
- 5 UserClassification5
Screens テーブルに次のデータがあります (ID と名前):
- 1 Screen1
- 2 Screen2
- 3 Screen3
Workflow テーブルに次のデータがあります (UserClassificationID と ScreenID):
1 1
1 2
データを見るとScreen3
、ユーザー分類に関連付けられていません。これは私が必要としているもので、特定のユーザー分類に関連付けられていないすべての画面のリストです。どうすればいいですか?
私のセットアップに関する追加情報。UserClasses および Screens テーブル用に定義した 2 つのクラス:
public class UserClassification : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Screen> Screens { get; set; }
}
public class Screen : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<UserClassification> UserClassifications { get; set; }
}
データベース コンテキスト クラスで使用される構成クラスは次のとおりです。
class ScreenConfiguration : EntityTypeConfiguration<Screen>]
{
internal ScreenConfiguration()
{
this.Property(x => x.Id).HasColumnName("ScreenID");
this.Property(x => x.Name).HasColumnName("ScreenName");
}
}
class UserClassificationConfiguration : EntityTypeConfiguration<UserClassification>
{
internal UserClassificationConfiguration()
{
this.ToTable("UserClasses");
this.Property(x => x.Id).HasColumnName("UserClassID");
this.Property(x => x.Name).HasColumnName("UserClass");
this.HasMany(i => i.Screens)
.WithMany(c => c.UserClassifications)
.Map(mc =>
{
mc.MapLeftKey("UserClassificationID");
mc.MapRightKey("ScreenID");
mc.ToTable("Workflow");
});
}
}
したがって、上記の情報を考慮して、このユーザー分類に関連付けられていない画面のリストを含むユーザー分類オブジェクトを返す必要があります。この場合は、1 つの画面アイテムのリストになります。どうすればこのようなことをすることができますか?
これは、関連付けテーブルにある画面のリストを含むユーザー分類オブジェクトを返す方法です。
return DbContext.UserClasses
.Include("Screens")
.SingleOrDefault(x => x.Id == userClassificationId);