每个模型都需要MVC数据库表吗?

时间:2012-11-15 23:54:29

标签: c# asp.net-mvc ef-code-first

我是MVC的新手,我只是想建立一个简单的网站。 我首先使用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。

请帮忙!

2 个答案:

答案 0 :(得分:3)

看起来Family是数据库中的表,而Family类是映射到Family表的实体。

由于您将List<FamilyMember> Members作为Family类的属性,因此EF会尝试将该属性映射到相关表。

为了向EF发出信号以不映射该属性,请添加[NotMapped]属性:

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

这假设您没有使用Fluent API。如果您正在使用Fluent,那么您可以这样指定:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Family>().Ignore(t => t.Members);
    base.OnModelCreating(modelBuilder);
}

答案 1 :(得分:0)

您指定自动转换为表格映射的public virtual List<FamilyMember> Members { get; set; },例如similar mapping

如果你不想在你的例子中映射属性,你可以将它的可见性改为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; }
}