1

2 つの異なる db テーブルの項目を持つモデルをマップしようとしています。2 つのテーブル (aspnet_Users && aspnet_Membership) があります。両方のフィールドを含むモデルを作成したいと考えています。私の問題はそれを設定することです。

DbContext の「OnModelCreating」オーバーライドに追加する必要があるようですが、そこに何が必要かわかりません。

ここに私のモデルがあります:

 [Table("aspnet_Users")]
 public class ApplicationUser : Base, IApplicationUser
 {
        [Key]
        public Guid UserId { get; set; }
        public string UserName { get; set; }
        public DateTime LastActivityDate { get; set; }

        public ApplicationUser_Details UserDetails { get; set;}
 }

 [Table("aspnet_Membership")]
 public class ApplicationUser_Details : Base
 {
    [Key]
    public Guid UserId { get; set; }
    public string Email { get; set; }
 }

Scott Gu の Web サイト (http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping) の GUID をたどろうとしています。 .aspx -- セクション 3) ですが、EF4.3 の場合は動作しません。

私がやろうとしていることは十分に単純に思えますが、何らかの理由で実装方法に関する適切なドキュメントを見つけるのに苦労しています。

ありがとう!

4

3 に答える 3

0

既存のメンバーシップテーブルにマップしたい場合(私があなたが望むものをよく理解している場合)、あなたはこのようなことをすることができます...
(注:目的がわからないので、私は「Base」クラスを無視していますそのため、基本クラスを持つことはできますが、少し複雑になるため、「カバー」されません。また、「両方のフィールドを含む」が何を意味するのかわからないため、レイアウト時に2つのテーブルを2つのクラスにマップします。 )。

[Table("aspnet_Users")]
public class ApplicationUser // : Base, IApplicationUser
{
    //[Key]
    //[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Computed)]
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    public DateTime LastActivityDate { get; set; }
    public ApplicationUser_Details UserDetails { get; set; }
}

[Table("aspnet_Membership")]
public class ApplicationUser_Details // : Base
{
    //[Key]
    public Guid UserId { get; set; }
    public string Email { get; set; }
    public ApplicationUser User { get; set; }
}

...そしてあなたのOnModelCreating()...

modelBuilder.Entity<ApplicationUser>()
    .HasKey(x => new { x.UserId });

//modelBuilder.Entity<ApplicationUser>()
//    .Property(x => x.UserId)
//    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

modelBuilder.Entity<ApplicationUser_Details>()
    .HasKey(x => new { x.UserId });

modelBuilder.Entity<ApplicationUser_Details>()
    .HasRequired(i => i.User)
    .WithRequiredDependent(i => i.UserDetails);

...これにより、FKがPKでもある(詳細について)正しい関係(1対1)が作成されます。

それでも、MVCなどでメンバーシップテーブルを使用したい場合は、これが簡単かもしれません...
http://codefirstmembership.codeplex.com/

お役に立てれば、

于 2012-04-20T22:33:20.490 に答える
0

EF 4.3 では、外部エンティティ マッピングを自分で行う必要はありません。接続されたエンティティの両側が互いに対応する参照を持っていることを確認してください。式。カテゴリ エンティティには食品エンティティのコレクションのプロパティがあり、すべての食品エンティティには単一のカテゴリのプロパティがあります。また、テーブル名を指定する必要はありません。カテゴリ - 食品の例に基づいてリレーションシップを設定したら、追加や削除などのアクションで両側からのリレーションシップも処理する必要があることを忘れないでください。

于 2012-04-20T19:55:09.660 に答える
0

まず第一に、おそらく asp.net テーブルに直接アクセスするべきではありません。可能であれば、組み込みのプロバイダーを使用してください。

第二に、長期的には、エンティティをテーブル構造とまったく同じに保つ方がはるかに簡単であることがわかりました。アプリケーションでデータを別の方法で表現する必要がある場合は、アプリケーション固有のモデルを作成します。AutoMapperを使用して、エンティティからモデルへのマッピングを支援できます。

オートマッパーとは?

AutoMapper は、一見複雑な問題を解決するために構築された単純な小さなライブラリです。つまり、あるオブジェクトを別のオブジェクトにマップするコードを削除します。このタイプのコードは、書くのがかなり単調で退屈なので、それを行うためのツールを発明してみませんか?

どうすれば始められますか?

入門ガイドをご覧ください。完了すると、wiki が詳細に進みます。最後に、完全なチュートリアルについてはdnrTV エピソードをチェックしてください。

于 2012-04-20T19:42:33.317 に答える