如何让Entity Framework初始化我新创建的实体上的集合?

Dan*_*eny 8 .net asp.net-mvc entity-framework sql-server-ce ef-code-first

我正在尝试用一些IDatabaseIntialiser像这样的测试数据为我的数据库播种:

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);
Run Code Online (Sandbox Code Playgroud)

Post实体看起来像这样:

public class Post
{
    // ...
    public virtual ICollection<Tag> Tags { get; set; }
Run Code Online (Sandbox Code Playgroud)

Bitbucket的完整实体:帖子标签.所有代码均在http://code.dantup.com/blog

但是,post.Tags为null,所以这不起作用.最初我是创建帖子new Post(),但是因为我正在调用CreateEF提供的方法,为什么集合没有初始化?

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

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

编辑:context.Configuration.ProxyCreationEnabled设置为true(默认情况下),这似乎是存在的原因

Fab*_*ers 6

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