我已经创建了映射到实体域模型中实体的POCO域对象。
到现在为止我必须处理多对多关系时,一切都运转良好。

假设我有三个桌子。
-博客
-BlogTag
-标记


您会看到Blogs和Tag具有一个桥接表,多对多,BlogTag包含两个表的外键。

我也有相应的领域模型:
-博客
-博客标签
-标签


现在,我选择一个博客列表,并尝试从博客中访问特定标签。

myBlog.BlogsTags [0]。标记

BlogTags [0] .TagForeignKey已填写,但BlogTags [0] .Tag为!

我还打开了LazyLoading。

我可能做错了什么?

谢谢。

好的。这是一些源代码。

我的上下文课

public class MyContext : ObjectContext
    {
        public MyContext() : base(Utility.GetConnectionString(...), "containerName")
        {
            Blogs = CreateObjectSet<Blog>();
            BlogsTags = CreateObjectSet<BlogTag>();
            Tags = CreateObjectSet<Tags>();

            base.ContextOptions.LazyLoadingEnabled = true;
        }

        public ObjectSet<Blog> Blogs { get; private set; }
        public ObjectSet<BlogTag> BlogsTags { get; private set; }
        public ObjectSet<Tags> Tags { get; private set; }
    }

我的poco类中只有一个带有virtual关键字的相关对象列表。

最佳答案

BlogTag根本不应该是一个实体:它只是一个关系,它不包含任何实际数据。如果使用外键在数据库中对关系进行了正确的建模,则实体模型设计者应意识到这一点,并从概念模型中消除BlogTag。

编辑:

我不确定为什么延迟加载在这里不起作用,但是您始终可以使用Include显式加载Tag:

var myBlog = context.Blogs.Include("BlogTags.Tag").First(b => b.Id = blogId);
var tag = myBlog.BlogsTags[0].Tag;

关于entity-framework - Entity Framework 4.0 POCO和多对多问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1910092/

10-09 15:48