0

私はこれを理解することはできません...私はSQLCE4でFluentNhibernateを使用しようとしました..そして私の設定はセッションのために次のようになります:

    public class FluentNHibernateFactory
{
    private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
        .Database(MsSqlCeConfiguration.Standard
        .ConnectionString(ConfigurationManager.ConnectionStrings["SqlCeDatabase"].ConnectionString))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ApplicationEntity>())
        .BuildSessionFactory();
    }

    public static ISession GetOpenSession()
    {
        return CreateSessionFactory().OpenSession();
    }
}

私のマッピングは次のようになります。

    public class ApplicationMap : ClassMap<ApplicationEntity>
{
    public ApplicationMap()
    {
        Table("Applications");
        Id(x => x.Id).GeneratedBy.Assigned().Column("id");
        Id(x => x.Alias).Column("alias");
        Id(x => x.Name).Column("name");
        Map(x => x.Created).Column("created");
        Map(x => x.CreatedByUser).Column("createdBy");
        Map(x => x.Updated).Column("updated");
        Map(x => x.UpdatedByUser).Column("updatedBy");
    }
}

そして最後に..私のリポジトリは次のようになります..:

public class ApplicationRepository : IRepository<ApplicationEntity>
{

    public void Add(ApplicationEntity entity)
    {
        using (var session = FluentNHibernateFactory.GetOpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Save(entity);
                //TODO: Fix the add functionality
                transaction.Commit();
            }
        }
    }

    public void Remove(ApplicationEntity entity)
    {
        throw new NotImplementedException();
    }

    public void Update(ApplicationEntity entity)
    {
        throw new NotImplementedException();
    }

    public IEnumerable<ApplicationEntity> GetAll()
    {
        using (var session = FluentNHibernateFactory.GetOpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                return session.CreateCriteria<ApplicationEntity>().List<ApplicationEntity>().AsEnumerable<ApplicationEntity>();
            }
        }
    }

    public ApplicationEntity GetById(long id)
    {
        throw new NotImplementedException();
    }
}

しかし、データベースにオブジェクトを追加することはできません..Addメソッドに渡されるエンティティオブジェクトには、すべてのプロパティの値があり、それらも有効なプロパティのようです..しかし、テーブルには3つの主キーがあります、それで問題になるのでしょうか?

ちなみに表はこんな感じ。


アプリケーション |

ID | bigint | ヌルでない | 主キー

エイリアス | nvarchar(25) | ヌルでない | 主キー

名前 | nvarchar(100) | ヌルでない | 主キー

作成 | 日時 | ヌルではない

作成者 | bigint | ヌルではない

更新 | 日時 | ヌル

更新者 | bigint | ヌル

ここで何か間違っていると思いますか?私はNHibernateを初めて使用するので、ここで本当に奇妙なことをしていたかもしれません..

取得するエラーは次のとおりです。 ?, ?, ?)]"}

内部例外の場合: {"データ変換に失敗しました。[ OLE DB ステータス値 (既知の場合) = 2 ]"}

表の書き方が悪くてすみません..

前もって感謝します!

4

1 に答える 1