我正在使用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; }
}
在我的数据库上下文类中,我有以下内容:
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");
});
}
}
我是否使用实体框架正确链接了它?如果我通过用户 ID,则需要返回标记为模拟用户的用户列表。我该怎么做?我有这个,但 User 和 ImpersonatedUsers 都是空的:
return DbContext.Users
.Include("ImpersonatedUsers")
.SingleOrDefault(x => x.Id == userId);
假设我的用户表中有以下数据(id、名字、姓氏、员工编号):
7 Craig Matthews 123456
8 Susan Renshaw 234567
9 Michelle du Toit 34567
以及我的 Impersonations 表中的以下数据(模拟 id、用户 id、模拟用户 id):
1 7 8
2 7 9
因此,如果我传入 7 的用户 ID,那么它需要返回用户 Susan Renshaw 和 Michelle du Toit 的记录。
如果您仍然感到困惑,只是为了清楚起见...
我也有类似的情况。我有一个产品表和一个规格表。这 2 个由名为 ProductSpecifications 的关联表链接起来。我试图在这里实现相同的目标,但 2 个表将是用户表,关联表是模拟。