0

を取得しようとしていますが、これにはfor everyList<User>が含まれていますが、クエリを実行すると、とevery (唯一の)にはが含まれていますが、何も含まれていません。List<Article>UserList<User>UserUserList<Article>

DBとキーが一致することを確認したので、私の推測(まあ、推測の多くではありません)は、マッピングに問題があるということです。1対多(HasMany)の例を検索して試しましたが、何も機能していません。何が悪いのか考えている人はいますか?

クラス

    public class User
    {
        public virtual int UserId { get; set; }
        public virtual string Name { get; set; }
        public virtual string Password { get; set; }
        public virtual IList<Article> Articles { get; set; }

        public User()
        {
            Articles = new List<Article>();
        }
    }

public class Article
{
    public virtual int ArticleId { get; set; }
    public virtual string Title { get; set; }
    public virtual string Ingress { get; set; }
    public virtual DateTime Created { get; set; }
    public virtual string ArticleText { get; set; }
    public virtual User Author { get; set; }
}

これらは私のマッピングです

    public class UserMap : ClassMap<User>
    {
        public UserMap()
        {
            Id(x => x.UserId);
            Map(x => x.Name);
            Map(x => x.Password);
            HasMany(x => x.Articles).KeyColumn("UserId").LazyLoad();
        }
    }


    public class ArticleMap : ClassMap<Article>
    {
        public ArticleMap()
        {
            Id(x => x.ArticleId);
            Map(x => x.Title);
            Map(x => x.Ingress);
            Map(x => x.Created);
            References(x => x.Author).Column("UserId").LazyLoad();
            Map(x => x.ArticleText).Length(4001);
        }
    }

そして、これが挿入/選択の私の呼び出しです

        List<User> usr = new List<User>();
        using (var session = SessionFactoryHelper.OpenSession())
        {
            using (var transaction = session.BeginTransaction())
            {



               User u = new User
               {
                   Name = "Mohindra",
                   Password = "Corn"
               };

               Article a = new Article
               {
                   Title = "Doh!",
                   Ingress = "yada yada",
                   ArticleText = "why dammit! whyyy?!11!!",
                   Created = DateTime.Now,
                   Author = u
               };

               session.Save(u);
               session.Save(a);


               usr = session.Query<User>().ToList();
               transaction.Begin();

               transaction.Commit();
            }
        }

これは新人の間違いの中で最も単純なものかもしれませんが、私はO / RMを使用するのは非常に新しいので、ここで何が問題になるのかわかりません。

画像

4

1 に答える 1

2

使用し HasMany(x => x.Articles).Table("Article").KeyColumn("UserId").LazyLoad(); た後、オブジェクトを個別に保存しました。

使うべきだった時、 HasMany(x => x.Articles).Table("Article").KeyColumn("UserId").Cascade.All();

^ この場合、Article継承された myUserと I はリレーションで保存できます。

于 2013-01-15T23:43:25.733 に答える