0

我无法弄清楚这个...我尝试将 FluentNhibernate 与 SQLCE4 一起使用 .. 我的配置在会话中看起来像这样:

    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 方法的实体对象具有所有属性的值,它们似乎也是有效的属性。但是我确实在表中有三个主键,所以这可能是问题吗?

顺便说一下,表格看起来像这样:


应用 |

身份证 | 大整数 | 非空 | 首要的关键

别名 | nvarchar(25) | 非空 | 首要的关键

姓名 | nvarchar(100) | 非空 | 首要的关键

创建 | 日期时间 | 非空

创建者 | 大整数 | 非空

更新 | 日期时间 | 空值

更新者 | 大整数 | 空值

大家有没有看到这里有什么不对劲的地方?我是 NHibernate 的新手,所以我可能在这里做了一些非常奇怪的事情。

我得到的错误是:{“无法插入:[LBi.CATT.Core.Domain.Entities.ApplicationEntity#Test][SQL: INSERT INTO Applications (created, createdBy, updated, updatedBy, name) VALUES (?, ?, ?, ?, ?)]"}

对于内部异常:{“数据转换失败。[OLE DB 状态值(如果已知)= 2]”}

抱歉表格的格式不好..

提前致谢!

4

1 回答 1

0

以下是不合法的

Id(x => x.Id).GeneratedBy.Assigned().Column("id");
Id(x => x.Alias).Column("alias");
Id(x => x.Name).Column("name");

要么使用这个(如果 Id 是主键)

Id(x => x.Id)
    .GeneratedBy.Assigned()
    .UnsavedValue(0)
    .Column("id");
Map(x => x.Alias).Column("alias");
Map(x => x.Name).Column("name");

或者这个(如果 Id、Alias、Name 一起是主键)

CompositeId()
    .KeyProperty(x => x.Id, "id")
    .KeyProperty(x => x.Alias, "alias")
    .KeyProperty(x => x.Name, "name");
于 2011-12-01T08:42:35.617 回答