EF 4 POCO:保存具有多个相关实体的新实体

时间:2011-09-06 07:31:47

标签: entity-framework poco entity-relationship

假设我有以下POCO实体:

public class CellPhone {
    public Manufacturer PhoneManufacturer;
    public ICollection<Color> PhoneColor { get; set; }        
    public string Version { get; set; }
}

public class Manufacturer {
    public int ID { get; set;}
    public string Name { get; set; }
}

public class Color {
    public int ID { get; set;}
    public string Name { get; set; }

}

我的ObjectContext类中的每个实体都有一个ObjectSet。

创建新的CellPhone实例时,我通常拥有制造商和颜色的ID,因此为了将我的新CellPhone实例的引用添加到正确的制造商和颜色实体,我需要首先使用相同的上下文检索它们(查询其ObjectSet的ID),设置CellPhone实例的相关导航属性,然后保存新的CellPhone实例(将其添加到ObjectSet和SaveChanges())。

如果我有超过2个相关实体加入像CellPhone这样的类,这个过程就变得无效了。

有没有办法更有效地做到这一点?即,没有查询每个相关实体的数据库?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用模型类保留外键属性。然后您不需要使用Find by Id。

public class CellPhone {
     public Manufacturer PhoneManufacturer;
     public int PhoneManufacturerId { get; set; }//foreignkey
    public ICollection<Color> PhoneColor { get; set; }        
    public string Version { get; set; }
}

现在你可以这样做,

 CellPhone cellpHone=new CellPhone {PhoneManufacturerId =2,Version= ""};
   context.Attach(cellpHone);
   context.SaveChanges();