2012-11-15 42 views
1

我是新來的MVC,我只是想建立一個簡單的網站。 我首先使用EF代碼。我的問題是MVC一直在尋找的,我不希望永久存儲模型的數據庫表,(我只初始化它的一個對象時,我用它) 這裏是我的代碼:每個模型都需要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。

請幫忙!

回答

3

它看起來像家庭是你的數據庫上的表,而家庭是一個映射到您的家庭表的實體。

由於您有List<FamilyMember> Members作爲您的Family類的屬性,因此EF試圖將該屬性映射到相關表。

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

這是假設你沒有使用流利的API:

爲了發送信號給EF不映射該屬性,添加[NotMapped]屬性。如果你使用流利,那麼你會像這樣指定它:

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

非常感謝你!有用。 –

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; } 
} 
+0

非常感謝。我只是對我的成員obj和其他課程之間的差異感到困惑。是否僅僅因爲我在另一個課程中有一個列表而被映射?因爲對於一個普通的類,MVC不會映射它,如果我沒有在DbContext中指定它。 –

相關問題