3

エンティティ ドメイン モデルのエンティティにマップする POCO ドメイン オブジェクトを作成しました。多対多の関係で作業する必要がある今まで、すべてがうまく機能していました。

3 つのテーブルがあるとします。
- ブログ - ブログ
タグ
- タグ

ブログとタグは、両方のテーブルへの外部キーを含むブリッジ テーブル、BlogTag を使用して多対多であることがわかります。

対応するドメイン モデルもあります:
- ブログ
-ブログ
タグ - タグ

ここで、ブログのリストを選択し、ブログから特定のタグにアクセスしようとしています。

myBlog.BlogsTags[0].Tag

BlogTags[0].TagForeignKey は入力されていますが、BlogTags[0].Tag はnullです!!

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 キーワードがあります。

4

2 に答える 2

2

BlogTag はエンティティであってはなりません。これは単なる関係であり、実際のデータは含まれていません。外部キーを使用してデータベースでリレーションシップが適切にモデル化されている場合、エンティティ モデルの設計者はそれを認識し、概念モデルから BlogTag を削除する必要があります...


編集:

ここで遅延読み込みが機能しない理由はわかりませんが、いつでも明示的Includeに読み込むことができます:Tag

var myBlog = context.Blogs.Include("BlogTags.Tag").First(b => b.Id = blogId);
var tag = myBlog.BlogsTags[0].Tag;
于 2009-12-15T22:38:48.623 に答える
0

Be sure that the relationship properties that you are accessing in the Entity are defined as "virtual" otherwise they will not be traversed automatically.

I had the same problem...eg. of my user entity:

public class User : EntityBase
    {
        public int UserID { get; set; }
        public string Username { get; set; }
        public string Email { get; set; }
        public virtual List<Role> Roles { get; set; } //VIRTUAL here is KEY!
}

I assume your's should be:

 public class Blog
        {

     public string Owner { get; set; }
     public string BlogText { get; set; }
     public virtual List<BlogTag> BlogTags { get; set; }  //VIRTUAL here is KEY!

    }
于 2009-12-16T21:23:53.933 に答える