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

标签 .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);

帖子实体如下所示:
public class Post
{
    // ...
    public virtual ICollection<Tag> Tags { get; set; }

Bitbucket 上的完整实体:PostTag .所有代码都在 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/

相关文章:

c# - ASP.net MVC 条件验证

.net - Autofac + SignalR

c# - 简单成员(member)资格使我无法找到请求的 .Net Framework 数据提供者

c# - ef 4.1 LINQ 将元素过滤到集合中

c# - 开放认证 - 供应商

c# - 将引用 C++/CLI 包装器的 UserControl 添加到表单的非托管 dll 时出现问题

asp.net-mvc - MVC 中的局部 View

.net - 在 .NET 中将字符串转换为 System.Color

c# - 如何实现像 lock 语句中的互斥,但如果它被锁定,该 block 将被跳过?

entity-framework - Entity Framework Core 的 AddRangeAsync() 在通用方法中不起作用