使用流畅的nhibernate映射进行持久性规范测试

时间:2011-10-17 18:19:08

标签: c# nhibernate fluent-nhibernate foreign-keys

我最近一直在玩流利的nhibernate&更具体地说,持久性规范测试。

但是,在为此行构建测试模式时,我在使用nunit运行相对简单的测试时仍然遇到sql lite错误:(SessionSource.BuildSchema(Session))。

  

System.Data.SQLite.SQLiteException:“/”附近的SQLite错误:语法   错误

寻求一些关于我做错的指导,因为我比较流利。有没有更简单的方法来解决此错误消息?

public class Contact
{
    public int Id { get; protected set; }
    // some other properties 
    public IList<Note> Notes { get; set; }
}

public ContactMapping()
{
    Not.LazyLoad();
    Id(m => m.Id).GeneratedBy.Identity();
    HasMany(x => x.Notes).KeyColumns.Add("ContactId");
}

public class Note
{
    public int Id { get; protected set; }
    public Contact Contact { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}

public NoteMapping()
{
    Not.LazyLoad();
    Id(m => m.Id).GeneratedBy.Identity();
    Map(m => m.Title).Not.Nullable().Length(250);
    Map(m => m.Description).Not.Nullable().Length(2500);
    References(x => x.Contact).Column("ContactId").Cascade.All();
}

配置:

public void SetupContext()
{
    var cfg = Fluently.Configure()
        .Database(SQLiteConfiguration.Standard
            .ShowSql()
            .InMemory
            );
    SessionSource = new SessionSource(cfg.BuildConfiguration()
                                            .Properties, PersistenceModel());
    Session = SessionSource.CreateSession();
    SessionSource.BuildSchema(Session);
}

private static PersistenceModel PersistenceModel()
{
    var model = new PersistenceModel();
    model.AddMappingsFromAssembly(typeof(Contact).Assembly);
    return model;
}

最后是持久性测试:

new PersistenceSpecification<Contact>(Session)
    .CheckProperty(c => c.Id, 1)
    .CheckProperty(c => c.First, "Coding")
    .CheckProperty(c => c.Last, "Quiz")
    .CheckProperty(c => c.Email, "mail@test.com")
    .CheckReference(c => c.Notes, new Note { Title = "Title", Description = "Description" })
    .VerifyTheMappings();

2 个答案:

答案 0 :(得分:7)

您应该在CheckList课程中使用PersistanceSpecification而不是上述代码中的CheckReference

答案 1 :(得分:1)

嗯,我觉得有点傻。我从我的初始帖子中排除的其中一个列是DateTime字段,该字段的默认值设置不正确,这反过来在构建模式时生成了无效的sql。

在构建架构时输出表的配置突出显示了我的错误。