2

私はエンティティフレームワークをデフォルトのメンバーシップ "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); 

答えて

2

はこれを試してみてください。これらのテーブルにアクセスするには、標準メンバーシップAPIを使用します。これらのテーブルはメンバーシップ/ロールAPIに属し、EFを介してそれらを処理するだけで、APIが提供する機能が削除または破棄されます。通常、EFおよびビジネスルールでこれらのテーブルを更新できるため、セキュリティが低下しますメンバーシップ/役割APIからのアクセスは強制されません。

+0

EFを使用して更新と操作が可能なので、これを正確に行う必要があります。基本的には、依存するシステムにのみ対応するためにこのデータベースを使用しますが、これらのデータを扱うカスタムアプリケーションを作成する必要があります。そして、ありがとうございました - それは私が試したことのない唯一の組み合わせかもしれません:) – Dynde