使用模型构建器在Entity Framework中进行虚拟ICollection延迟加载

时间:2014-03-06 13:26:00

标签: c# entity-framework

我对EF没有什么问题,我不知道如何解释它,所以我举一个例子:

这是我的对象:

public class User
{
    public int UserId { get; set; }

    public virtual ICollection<Tag> Tags { get; set; }

    // Need model builder example for this one
    public virtual ICollection<Event> Events { get; set; }
}

public class Tag
{
    public int TagId { get; set; }
    public int UserId { get; set; }

    public virtual User User { get; set; }
    public virtual ICollection<Event> Events { get; set; }
}

public class Event
{
    public int EventId { get; set; }
    public int TagId { get; set; }
    public virtual Tag Tag { get; set; }
}

是否可以通过“Event.Tag.User”延迟加载/映射虚拟ICollection'User.Events'而不更改任何数据库表?

2014年3月7日

以下是SLQ子句的示例,其中UserId为1的用户:

SELECT Events.EventId
FROM Events
INNER JOIN Tags ON Tags.TagId = Events.TagId
INNER JOIN Users ON Users.UserId = Tags.UserId
WHERE Users.UserId = 1

我不确定,但我看起来像是:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasMany(user => user.Events).WithMany(...
}

1 个答案:

答案 0 :(得分:0)

是。只要不处理您的上下文,您访问的任何虚拟属性都将再次访问数据库。如果您遇到特定问题,可能会发布错误消息。我现在看到你的代码没有任何问题。