.net 如何让实体框架在新创建的实体上初始化集合?

.net 如何让实体框架在新创建的实体上初始化集合?,.net,asp.net-mvc,entity-framework,sql-server-ce,ef-code-first,.net,Asp.net Mvc,Entity Framework,Sql Server Ce,Ef Code First,我正在尝试使用IDatabaseInitializer为我的数据库添加一些测试数据,如下所示: protected override void Seed(BlogDataContext context) { // <snip> var post = context.Posts.Create(); post.Title = "My Life On Twitter"; // <snip properties> // Set tags

我正在尝试使用
IDatabaseInitializer
为我的数据库添加一些测试数据,如下所示:

protected override void Seed(BlogDataContext context)
{
    // <snip>
    var post = context.Posts.Create();
    post.Title = "My Life On Twitter";
    // <snip properties>

    // Set tags
    post.Tags.Add(aspnetTag); // NullRefException
    post.Tags.Add(razorTag);
public class Post
{
    // ...
    public virtual ICollection<Tag> Tags { get; set; }
受保护的覆盖无效种子(BlogDataContext上下文)
{
// 
var post=context.Posts.Create();
post.Title=“我在Twitter上的生活”;
// 
//设置标签
post.Tags.Add(aspnetTag);//NullRefException
post.Tags.Add(razorTag);
Post实体如下所示:

protected override void Seed(BlogDataContext context)
{
    // <snip>
    var post = context.Posts.Create();
    post.Title = "My Life On Twitter";
    // <snip properties>

    // Set tags
    post.Tags.Add(aspnetTag); // NullRefException
    post.Tags.Add(razorTag);
public class Post
{
    // ...
    public virtual ICollection<Tag> Tags { get; set; }
公共类职位
{
// ...
公共虚拟ICollection标记{get;set;}
位桶处的完整实体:和。所有代码位于

但是,
post.Tags
为空,因此这不起作用。最初我是作为
new post()
创建post的,但是既然我调用了EF提供的
Create
方法,为什么集合没有初始化

在这里实例化我自己的集合感觉很笨拙,如果我在构造函数中这样做,大概每次我从EF加载一个实体时,它都会在构造函数中创建集合,然后用一个包含DB中实际数据的集合覆盖它

有没有办法告诉EF创建一个实体,包括我的
ICollections
的集合/代理(假设
ICollection
是正确的选择)


Edit
context.Configuration.ProxyCreationEnabled
设置为true(默认),?

使用POCO实体和EF,我通常在构造函数中初始化集合。而且,我更喜欢ISet而不是ICollection;-)

初始化它的目的是什么?它感觉很笨拙,因为EF在加载时会以不同的方式初始化东西(可能有代理)。我想知道是否可以这样做。另外-ISet vs ICollection-我一直在谷歌上搜索,但找不到任何信息,哪些收藏最适合EF,原因是什么:(如果我使用ISet,我将实例化一个HasSet。我认为EF是智能的,它可以在尝试将集合与您的实体绑定时检查集合是否已初始化。集合确保其集合中的每个项都是唯一的。集合允许对同一对象进行多个引用。如果在拉取I后查看ICollection的原始视图,则从DbContext中,您可以看到EF将使用HashSet来初始化您的对象。我建议您在属性get/set中也这样做。也就是说-我同意这并不令人满意。MVC为您创建对象,因此您必须使用EF特定的初始化来破坏您的模型代码。我更希望通过但是,如果您使用的是new()若要实例化对象,EF将无法了解它们,除非您将它们放入ObjectContext中。请看这里:在源代码中,EF4.1 CodeFirst POCOs不需要进行集合初始化least@Omu-我使用的是EF4.1,但集合在创建时为空,但外观与它们的相同。您可以向我们展示您的实体吗?我发布了相关部分,但如果您想查看完整文件,所有代码都在