我正在尝试使用 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()
,但是因为我调用 Create
EF 提供的方法,为什么集合没有初始化?在这里实例化我自己的集合感觉很笨拙,如果我在构造函数中这样做,大概每次我从 EF 加载一个实体时,它都会在构造函数中创建集合,然后用包含来自 EF 的实际数据的集合覆盖它D B?
有什么方法可以告诉 EF 为我创建一个实体,包括我的
ICollections
的集合/代理(假设 ICollection
是正确的选择)?编辑 :
context.Configuration.ProxyCreationEnabled
设置为 true(默认),which seems to exist for this reason ?
最佳答案
使用 POCO 实体和 EF,我通常在构造函数中初始化集合。而且,我更喜欢 ISet 而不是 ICollection ;-)
关于.net - 如何让 Entity Framework 在我新创建的实体上初始化集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982254/