Сопоставление значений FluentNhiberate SQLCE4 (?,?,?,?) В транзакции. - PullRequest
0 голосов
/ 01 декабря 2011

Я не могу понять это ... Я попытался использовать 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, имеют значения для всех свойств, и они также, похоже, являются допустимыми свойствами ... но у меня, тем не менее, есть три первичных ключа в таблице, может ли это быть проблемой?

Кстати, таблица выглядит так:


Приложения |

Id | bigint | НЕ НУЛЬ | Первичный ключ

псевдоним | nvarchar (25) | НЕ НУЛЬ | Первичный ключ

имя | nvarchar (100) | НЕ НУЛЬ | Первичный ключ

создано | дата и время | НЕ NULL

создалBy | bigint | НЕ NULL

обновлено | дата и время | NULL

updatedBy | bigint | NULL

Ребята, вы видите здесь что-нибудь не так? Я новичок в NHibernate, поэтому я мог бы сделать что-то действительно странное здесь ...

Ошибка, которую я получаю: {"не удалось вставить: [LBi.CATT.Core.Domain.Entities.ApplicationEntity # Test] [SQL: INSERT INTO Приложения (созданы, созданы, обновлены, обновлены, имя) ЗНАЧЕНИЯ (?,?,?,?,?) ] "}

и для внутреннего исключения: {"Преобразование данных не удалось. [Значение состояния OLE DB (если известно) = 2]"}

извините за плохое форматирование таблицы ..

Заранее спасибо!

1 Ответ

0 голосов
/ 01 декабря 2011

следующее не разрешено

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");
...