1

モデルクラス:

public class User {
    [Key]
    public Guid UserId { get; set; }

    [Display(Name = "User Name")]
    public string UserName { get; set; }

    public virtual ICollection<Asp_Membership> CreateDates { get; set; }
}

public class Asp_Membership {
    [Key]
    public Guid UserId { get; set; }

    [Display(Name = "Date Created")]
    public DateTime CreateDate { get; set; }
}

DbContext

public class UsersContext : DbContext {
        public UsersContext() : base("ApplicationServices") { }
        public DbSet<User> Users { get; set; }
        public DbSet<Asp_Membership> Asp_Memberships { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder) {
           //mapping of Users and Membership
           //what exactly do i put here to join the two tables by UserId
        }

私の質問は単純なものです。おそらくお分かりのように、これらはEFが実際にどのように機能するかを理解しようとする私の最初の試みです。私がやろうとしているのは、UserIdに基づいてaspnet_Usersテーブルとaspnet_Membershipテーブルを結合することです。どのくらい正確にそれを行うことができますか?

しかし、はるかに重要なのは、私は本当に良いEntity Frameworkチュートリアルを見つけることができなかったということですが、何か推奨事項はありますか?

- アップデート -

DbContext(上記と同じ)

モデルクラス:

public class User {
    [Key]
    public Guid UserId { get; set; }

    [Display(Name = "User Name")]
    public string UserName { get; set; }

    public virtual Asp_Membership asp_Membership { get; set; }
}

public class Asp_Membership {
    [Key]
    public Guid UserId { get; set; }

    [Display(Name = "Date Created")]
    public DateTime CreateDate { get; set; }
}

コントローラ:

private UsersContext db = new UsersContext();

// GET: /Users/Index
public ActionResult Index() {
    return View(db.Users.ToList());
}

インデックスページ:(不要な要素を削除して...)

@model IEnumerable<ReservationPro.Models.User>
...
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.UserName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.asp_Membership.CreateDate)
        </td>
    </tr>
}

私がやろうとしているのは、デフォルトのaspnetdbから2つの別々のテーブル「aspnet_Users」と「aspnet_Membership」を結合する方法を理解することです。モデルクラスに記載されているように、どちらにも「UserId」列があります。これは簡単な質問です。混乱させて申し訳ありません。おそらくお分かりのように、私はEFを始めたばかりで、いくつかの簡単なコードで手を「汚く」しようとしています。

4

2 に答える 2

1

もうすぐです。これを試して:

public class User {
    [Key]
    public Guid UserId { get; set; }

    [Display(Name = "User Name")]
    public string UserName { get; set; }

    public virtual Asp_Membership asp_membership { get; set;}
}

public class Asp_Membership {
    [Key]
    public Guid UserId { get; set; }

    [Display(Name = "Date Created")]
    public DateTime CreateDate { get; set; }

    public virtual User user { get; set;}
}

このようにして、どちらの方向にも一方から他方にアクセスできます。一方向にのみ必要な場合は、他の方向にアクセスするクラスに配置するだけです。また、これは関係が1対1であることを前提としています。あなたの質問から見分けるのはちょっと難しいです。

于 2012-07-27T17:42:36.953 に答える
1

UPDATEのモデルクラスを使用して、次のマッピングを試すことができます。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .HasOptional(u => u.asp_membership)
        .WithRequired();
}

マッピングとは、ユーザーがメンバーシップ(1つ以下)を持つことができることを意味しますが、必須ではありません(/HasOptional0..1。一方、メンバーシップには、常に1人の関連ユーザー(/ )が必要です。WithRequired1

ASP.NETメンバーシップテーブルではUser、テーブルは関係の主キーを持つプリンシパルを表し、Membershipテーブルは外部キーを持つ依存関係にあります。ただし、外部キーは同時にテーブルの主キー(UserId)です。Membershipしたがって、関係は共有主キーの1対1の関係です。上記のマッピングを使用してこれを明示的に定義する必要があります。そうしないと、デフォルトでEFがモデルから1対多の関係を推測します。

于 2012-07-28T10:50:50.763 に答える