2012-06-09 39 views
0

我有一个数据库表:EF许多一对多节能问题

Item{ItemId ...} 
Item{BoardId ...} 
ItemsInBoards{ItemId, BoardId, CreatedOnDate} 

我在我的应用程序中的模型

public class Item 
{ 
public int ItemId{get;set;} 
... 
public virtual ICollection<Board> Boards { get; set; } 
} 

public class Board 
{ 
public int BoardId{get;set;} 
... 
public virtual ICollection<Item> Items { get; set; } 
} 

保存...

... 
Item item = con.Item.Find(model.ItemId); // Find item by ID 
// Try to save 
Board b = con.Boards.Find(model.BoardId); // Find a board by ID 
       b.CreatedOnDate = DateTime.Now; // This is the issue 
       item.Boards.Add(b); 
       con.SaveChanges(); 

而且它已保存,但没有CreatedOnDate。我不知道如何设置CreatedOnDAte字段将其保存在数据库中。

回答

1

这不是一个多对多的关系。你需要两个一个一对多的关系,必须公开ItemsInBoards作为模型的实体:

public class Item 
{ 
    public int ItemId{get;set;} 
    ... 
    public virtual ICollection<ItemInBoard> ItemsInBoard { get; set; } 
} 

public class Board 
{ 
    public int BoardId{get;set;} 
    ... 
    public virtual ICollection<ItemInBoard> ItemsInBoard { get; set; } 
} 

public class ItemInBoard 
{ 
    [Key, Column(Order = 1)] 
    public int ItemId{get;set;} 
    [Key, Column(Order = 2)] 
    public int BoardId{get;set;} 

    public DateTime CreatedOnDate{get;set;} 

    public virtual Item Item{get;set;} 
    public virtual Board Board{get;set;} 
} 

然后你可以写入关联表 - 包括CreatedOnDate属性值 - 通过:

var newItemInBoard = new ItemInBoard 
{ 
    ItemId = model.ItemId, 
    BoardId = model.BoardId, 
    CreatedOnDate = DateTime.Now 
}; 
con.ItemsInBoard.Add(newItemInBoard); 
con.SaveChanges(); 

一些关于这种型号类型的更多细节在这里:https://stackoverflow.com/a/7053393/270591

+0

谢谢。我认为我不需要为这个中间表制作模型。 – 1110

+0

如果您添加的属性不只是外键,您需要明确添加 – jeroenh