1

私はMVCを初めて使用し、単純なWebサイトを構築しようとしています。そして、私は最初にEFコードを使用しています。私の問題は、MVCが永続ストレージを必要としないモデルのデータベーステーブルを常に探していることです(使用するときにそのオブジェクトを初期化するだけです)。これが私のコードです。

public class Family
{
    public int FamilyId { get; set; }
    public String FamilyName { get; set; }
    public String FamilyJoinString { get; set; }
    public String MemberIds { get; set; }
    public virtual List<FamilyMember> Members { get; set; }


    public List<FamilyMember> GetFamilyMembers()
    {
        var db = new HomeTrackerDb();
        var CommonHelper = new CommonHelper();
        var members = new List<FamilyMember>();
        var memberids = MemberIds;
        var ids = CommonHelper.SplitToList(memberids, ",");
        foreach (var id in ids)
        {
            var user = db.UserInfoes.Find(int.Parse(id));
            var member = new FamilyMember();
            member.FamilyMemberId = user.UserInfoId;
            member.FamilyMemberName = user.UserName;
            member.FamilyMemberLoad = 0;
            members.Add(member);
        }
        db.Dispose();
        return members;
    }

}

    //FamilyMember Class
    public class FamilyMember
    {
        public int FamilyMemberId { get; set; }
        public String FamilyMemberName { get; set; }
        public int FamilyMemberLoad { get; set; }
    }
}

コントローラーでのみFamilyMemberのリストを生成しており、DBの更新、挿入、および検索操作がありません。コントローラ:

    public ActionResult Edit(int id)
    {
        Family family = db.Families.Find(id);
        family.Members = family.GetFamilyMembers();                       
        return View(family);
    }

しかし、MVCは常にデータベーステーブルFamilyMembersが見つかりませんと言っています。

助けてください!

4

2 に答える 2

3

Familyはデータベース上のテーブルであり、FamilyクラスはFamilyテーブルにマップするエンティティのようです。

あなたはFamilyクラスのプロパティとして持っているのでList<FamilyMember> Members、EFはそのプロパティを関連するテーブルにマップしようとしています。

そのプロパティをマップしないようにEFに通知するには、次の[NotMapped]属性を追加します。

[NotMapped]
public virtual List<FamilyMember> Members { get; set; }

これは、FluentAPIを使用していないことを前提としています。Fluentを使用している場合は、次のように指定します。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Family>().Ignore(t => t.Members);
    base.OnModelCreating(modelBuilder);
}
于 2012-11-16T01:28:35.757 に答える
0

public virtual List<FamilyMember> Members { get; set; }これをテーブルマッピングに自動的に変換するように指定します(例:同様のマッピング) 。

例でプロパティをマップしたくない場合は、可視性をに変更できますがinternal、そのようなソリューションはまったく使用しないことをお勧めします。私にとっては、より良い方法は次のとおりです。

public class Family
{
    [Key]
    public int FamilyId { get; set; }
    public String FamilyName { get; set; }
    public String FamilyJoinString { get; set; }

    public IList<UserInfoes> Members { get; set; }
}

public class Family
{
    [Key]
    public int UserInfoId { get; set; }
    public Family Family { get; set; }
    public string UserName { get; set; }
}
于 2012-11-16T01:34:11.657 に答える