私はasp.net mvc 4、EF、codefirstを使用して、ユーザーとロールシステムとの多対多の関係を構築しています
ユーザーモデル:
public class User
{
#region properties
[Key]
public Int32 Id { get; set; }
[Required]
public String UserName { get; set; }
public String Password { get; set; }
[Required]
public String Email { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastUpdate { get; set; }
public DateTime? LastLogin { get; set; }
[ForeignKey("RoleId")]
public virtual ICollection<Role> Roles { get; set; }
#endregion //properties
#region constructors
public User()
{
Roles = new HashSet<Role>();
LastUpdate = DateTime.Now;
CreationDate = DateTime.Now;
}
#endregion //constuctors
}
ロールモデル:
public class Role
{
[Key]
public Int32 Id { get; set; }
public String Name { get; set; }
public String Description { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastUpdate { get; set; }
[ForeignKey("UserId")]
public virtual ICollection<User> Users { get; set; }
public Role()
{
Users = new HashSet<User>();
CreationDate = DateTime.Now;
LastUpdate = DateTime.Now;
}
}
コンテキスト:
public class UserManagementContext : Context, IContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
public UserManagementContext() {
Database.SetInitializer<UserManagementContext>(null);
}
void IContext.Setup(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<User>()
.HasMany(u => u.Roles)
.WithMany(r => r.Users)
.Map(
m =>
{
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
m.ToTable("UserRoles");
});
}
}
データベース テーブルが生成されると、テーブル users、roles、および userroles が存在します。次に、ユーザーにレコードを作成し、ロールに 1 つ、ユーザーロールに 1 つ、それらを接続します。userroles テーブルには、RoleId と UserId の 2 つの列があります。
次に、次のようにユーザーのロールをロードしようとします。
public String[] GetRoles(String userName)
{
//var user = ConcreteContext.Users.Include("Roles").Where(u => u.UserName == userName).FirstOrDefault();
var users = ConcreteContext.Users.Include(u => u.Roles);
var user = users.FirstOrDefault();
var roles = from r in user.Roles
select r.Name;
return roles.ToArray();
}
しかし、 の行でvar users = ConcreteContext.Users.Include(u => u.Roles);
は次のエラーが発生します。
System.Data.SqlClient.SqlException: Invalid object name 'dbo.RoleUsers'.
データベースを作成するときに (を使用して) UserRoles のテーブル名を RoleUsers に変更するとm.ToTable(RoleUsers)
、間違ったフィールド名に関するさまざまなエラーが発生します。
ここで何が欠けているのか誰にも分かりますか?
前もって感謝します、
ウィレム