1

UserクラスとOrganizationクラスがあります。彼らはこのように見えます

public class User
{
        public int UserId { get; set; }
        public string UserName { get; set; }
        public string Email { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public virtual ICollection<Organization> Organizations { get; set; }
}

public class Organization : EntityBase
{
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

また、どちらもEntityBaseクラスから継承して、Idや作成/更新されたトラッキングなどの一般的なフィールドを取得します。

public abstract class EntityBase
{
    public int Id { get; set; }
    public DateTime Created { get; set; }
    public virtual User CreatedBy { get; set; }
    public DateTime Updated { get; set; }
    public virtual User UpdatedBy { get; set; }
}

両方のICollectionプロパティで示されているように、多対多の関係が必要です。ただし、データベースが自動生成されると、テーブルに誤った外部キーが追加されます 組織テーブルとユーザーテーブルのマッピングが正しくありません

CreatedByとUpdatedByをUserプロパティではなく文字列に変更すると、探していた結合テーブルが表示されます。 正しいデータベース生成

これはEntityFrameworkが単に混乱している問題であり、流暢なマッピングを使用して多対多の構成を提供する必要がありますか、それとも何か間違ったことをしましたか?

4

1 に答える 1

1

複数の関係がある場合は、流暢なAPIまたは属性を使用して手動で構成する必要があります。

注:同じタイプ間に複数の関係がある場合(たとえば、PersonクラスにReviewedBooksおよびAuthoredBooksナビゲーションプロパティが含まれ、BookクラスにAuthorおよびReviewerナビゲーションプロパティが含まれるPersonクラスとBookクラスを定義するとします)。データアノテーションまたはFluentAPIを使用して、関係を手動で構成します

これがMicrosoftの記事です。

于 2012-11-14T03:20:22.517 に答える