19

私は最近、Entity Framework Code First でこの奇妙な問題に遭遇しました。

私のクラスは次のようになります

public class Status
{
        [Key]
        public int StatusID { get; set; }     
        public string Name { get; set; }
        public int MemberID { get; set; }

        [ForeignKey("MemberID")]
        public virtual Member Member { get; set; }                

        public int PosterID { get; set; }

        [ForeignKey("PosterID")]
        public virtual Member Poster { get; set; }        

        public virtual ICollection<StatusLike> StatusLikes { get; set; }        
        public virtual ICollection<StatusComment> StatusComments { get; set; }
}

私のメンバークラスは次のようになります

 public class Member
    {
        [Key]
        public int MemberID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Bio { get; set; }

        public virtual ICollection<MemberCourseTaken> MemberCourseTakens { get; set; }
        public virtual ICollection<Status> Statuses { get; set; }
        public virtual ICollection<Club> FoundedClubs { get; set; }

        public string EmailAddress { get; set; }
        public string Password { get; set; }
        public string Phone { get; set; }

        public int AccountSourceID { get; set; }
        public AccountSource AccountSource { get; set; }

        public int AddressID { get; set; }
        public Address Address { get; set; }
        public string ProfilePhoto { get; set; }

        public int MemberRankID { get; set; }
        public MemberRank MemberRank { get; set; }
        public DateTime Created { get; set; }
        public DateTime Modified { get; set; }
    }

何らかの理由で、作成されるデータベース テーブルには次の列があります。

StatusID
Name
MemberID
PosterID
Member_MemberID

MemberIDPosterIDおよびMember_MemberIDが外部キーです。

どうすればMember_MemberID生成されないようにできますか?

4

2 に答える 2

15

プロパティMember_MemberIDにより、列が作成されMember.Statusesます。これはあなたが望むものではないと想像できます。おそらく、メンバーとステータスは互いに独立して存在するはずなので、ジャンクション テーブルが必要です。

OnModelCreatingDbContextのオーバーライドを既に使用しているかどうかはわかりませんが、ここで Member と Status の間のマッピングを変更します。

protected override void OnModelCreating(DbModelBuilder mb)
{
    mb.Entity<Member>().HasMany(m => m.Statuses).WithMany();
}

これにより、2 つの Id 列を外部キーとして持つ MemberStatuses テーブルが作成されます。これは、関連付けの「反対側」にナビゲーション プロパティを持たない多対多の関係をモデル化する方法です。Members( にプロパティが必要だとは思いませんStatus)。

于 2012-06-06T10:09:16.100 に答える