Entity Framework 4.3 code first
既存のデータベースを使用しています。
Users table
次の列を持つ があります。
- UserID (int)
- FirstName (string)
- Surname (string)
という関連テーブルがありますImpersonations
。Impersonations テーブルは、ユーザー テーブルと同じユーザー テーブル間の関連付けテーブルです。ユーザーは、ユーザーのリストを持つことができます。Impersonations table
構造は次のとおりです。
- ImpersonateID (int primary key)
- UserID (int FK to Users table's UserID column)
- ImpersonatedUserID (int FK to Users table's UserID column)
これらの列にマップするプロパティを持つ User クラスがあります。
public class User : IEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmployeeNumber { get; set; }
public virtual ICollection<User> ImpersonatedUsers { get; set; }
public virtual ICollection<User> Users { get; set; }
}
私のdbコンテキストクラスには、次のものがあります。
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserConfiguration());
}
ユーザー構成:
class UserConfiguration : EntityTypeConfiguration<User>
{
internal UserConfiguration()
{
this.Property(x => x.Id).HasColumnName("UserID");
this.Property(x => x.LastName).HasColumnName("Surname");
this.Property(x => x.EmployeeNumber).HasColumnName("StaffNumber");
this.HasMany(i => i.Users)
.WithMany(c => c.ImpersonatedUsers)
.Map(mc =>
{
mc.MapLeftKey("UserID");
mc.MapRightKey("ImpersonatedUserID");
mc.ToTable("Impersonations");
});
}
}
Entity Framework を使用してこれを正しくリンクしましたか? ユーザー ID を渡すと、なりすましユーザーとしてマークされたユーザーのリストを返す必要があります。どうすればいいですか?私はこれを持っていますが、 User と ImpersonatedUsers の両方が空です:
return DbContext.Users
.Include("ImpersonatedUsers")
.SingleOrDefault(x => x.Id == userId);
Users テーブルに次のデータがあるとします (ID、名、姓、従業員番号)。
7 Craig Matthews 123456
8 Susan Renshaw 234567
9 Michelle du Toit 34567
そして、偽装テーブルの次のデータ (偽装 ID、ユーザー ID、偽装ユーザー ID):
1 7 8
2 7 9
したがって、ユーザー ID 7 を渡すと、ユーザー Susan Renshaw と Michelle du Toit のレコードを返す必要があります。
まだ混乱している場合は、わかりやすくするために...
私も似たような状況です。製品テーブルと仕様テーブルがあります。これら 2 つは、ProductSpecifications と呼ばれる関連付けテーブルによってリンクされています。ここで同じことを達成しようとしていますが、2 つのテーブルはユーザー テーブルであり、関連テーブルは偽装です。