我正在尝试使用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);
发布实体看起来像这样:
public class Post
{
// ...
public virtual ICollection<Tag> Tags { get; set; }
Bitbucket的完整实体:Post和Tag。所有代码均为http://code.dantup.com/blog
但是,post.Tags
为空,所以这不起作用。最初我创建帖子为new Post()
,但是因为我正在调用EF提供的Create
方法,为什么集合没有初始化?
在这里实例化我自己的集合感觉很笨拙,如果我在构造函数中执行它,大概每次我从EF加载一个实体时,它都会在构造函数中创建集合,然后用包含实际的集合覆盖它。来自DB的数据?
有没有办法告诉EF为我创建一个实体,包括ICollections
的集合/代理(假设ICollection
是正确的选择)?
修改:context.Configuration.ProxyCreationEnabled
设置为true(默认情况下),which seems to exist for this reason?
答案 0 :(得分:6)
使用POCO实体和EF,我通常在构造函数中初始化集合。而且,我更喜欢ISet而不是ICollection; - )