1

我是 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 列表,没有数据库更新、插入和查找操作。控制器:

    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 表的实体。

由于您拥有List<FamilyMember> MembersFamily 类的属性,因此 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);
}
于 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 回答