私はエンティティフレームワークをデフォルトのメンバーシップ "aspnetdb"データベースと共に使用しようとしています。EntityFrameworkとaspnetdb
メンバーシップからユーザーまでのナビゲーションプロパティが必要なので、メンバーシップとユーザーテーブルに問題があります。
私は流暢なAPIマッピングのすべての組み合わせを試したような気がしますが、私は何かが欠けているに違いない - あるいは、外部キーが両方のテーブルの主キーであるUserIdである同じように?ここで
は、私が持っているものです。
public class Membership {
[Key]
public Guid UserID { get; set; }
public String Password { get; set; }
public virtual User User { get; set; }
}
public class User {
[Key]
public Guid UserId { get; set; }
public String UserName { get; set; }
//public virtual Membership Membership { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Membership>().ToTable("dbo.aspnet_Membership");
modelBuilder.Entity<Role>().ToTable("dbo.aspnet_Roles");
modelBuilder.Entity<User>().ToTable("dbo.aspnet_Users");
modelBuilder.Entity<User>()
.HasMany(m => m.Roles)
.WithMany(m => m.Users)
.Map(m => {
m.ToTable("aspnet_UsersInRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
//modelBuilder.Entity<Membership>()
// .HasRequired(m => m.User);
//.WithOptionalPrincipal(m => m.Membership).Map(m=>m.MapKey("UserId"));
Database.SetInitializer<EkomiteDBC>(null);
base.OnModelCreating(modelBuilder);
}
役割は細かい設定し、動作しますが、私がしようとすると、会員とユーザーとの間の接続を定義する方法に関係なく、私は別のマッピングエラーを取得しておくいます。
私はおそらく何か基本的なものが足りないと知っています。
EDIT:「メンバーシップ」テーブルと「ユーザー」テーブルの両方にプライマリキー「UserID」があるようです。とにかくあなたがすべてでそれを行うべきではありません
modelBuilder.Entity<Membership>()
.HasRequired(m => m.User)
.WithOptional(u => u.Membership);
:
EFを使用して更新と操作が可能なので、これを正確に行う必要があります。基本的には、依存するシステムにのみ対応するためにこのデータベースを使用しますが、これらのデータを扱うカスタムアプリケーションを作成する必要があります。そして、ありがとうございました - それは私が試したことのない唯一の組み合わせかもしれません:) – Dynde