Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试时获取副本”;“一对多”;关系_C#_Sql_Nhibernate_Fluent Nhibernate_Fluent Nhibernate Mapping - Fatal编程技术网

C# 测试时获取副本”;“一对多”;关系

C# 测试时获取副本”;“一对多”;关系,c#,sql,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,C#,Sql,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我在测试Fluent NHibernate的持久性时遇到了一些问题。我不确定这是否仅仅是我对考试理解不足或是对考试的期望不当。如果是这样的话,有人对如何最好地为DAL的这一部分设置单元测试有什么建议吗 我有一对具有一对多关系的类Client和Facility: 一:客户端可以有许多设施 使用FluentNHibernate的映射结构,我希望它们应该如下所示: public class ClientMapping : DataMapping<Client> { public C

我在测试Fluent NHibernate的持久性时遇到了一些问题。我不确定这是否仅仅是我对考试理解不足或是对考试的期望不当。如果是这样的话,有人对如何最好地为DAL的这一部分设置单元测试有什么建议吗

我有一对具有一对多关系的类
Client
Facility

一:
客户端
可以有许多
设施

使用FluentNHibernate的映射结构,我希望它们应该如下所示:

public class ClientMapping : DataMapping<Client>
{
    public ClientMapping()
    {
        HasMany(client => client.Facilities)
            .Inverse()
            .Cascade
            .All();
    }
}

public class FacilityMapping : DataMapping<Facility>
{
    public FacilityMapping()
    {
        References(fac => fac.Owner);
    }
}

我找到的最接近的q/a是下面的q/a,但即使首先运行
客户机
测试,我似乎也会得到相同的结果(可能是因为每个测试的数据库状态都会自行重置):


结果证明我的期望是错误的。持久性规范测试只是测试数据到达数据库的位置——因此,它将在每次运行时发送新项

为了测试映射是否正确级联数据,我需要编写如下测试:

    [Test]
    public void CanSaveAndLoadFacilityMapping()
    {
        object id;
        object id2;

        using (var trans = _session.BeginTransaction())
        {
            id = _session.Save(_facility1);
            id2 = _session.Save(_facility2);

            trans.Commit();
        }

        _session.Clear();

        using (var trans = _session.BeginTransaction())
        {
            var facility = _session.Get<Facility>(id);
            var facility2 = _session.Get<Facility>(id2);

            Assert.AreEqual(facility.Name, _facility1.Name);
            Assert.AreEqual(facility.Owner.Name, _client.Name);
            Assert.AreEqual(facility2.Owner.Name, _client.Name);
            Assert.AreEqual(facility.Owner.Id, facility2.Owner.Id);

            trans.Dispose();
        }
    }
[测试]
public void可以保存并加载FacilityMapping()
{
对象id;
对象id2;
使用(var trans=\u session.BeginTransaction())
{
id=_session.Save(_facility1);
id2=_session.Save(_facility2);
trans.Commit();
}
_session.Clear();
使用(var trans=\u session.BeginTransaction())
{
var facility=_session.Get(id);
var facility2=_session.Get(id2);
Assert.AreEqual(facility.Name,_facility1.Name);
Assert.AreEqual(facility.Owner.Name,_client.Name);
Assert.AreEqual(facility2.Owner.Name,_client.Name);
Assert.AreEqual(facility.Owner.Id,facility2.Owner.Id);
trans.Dispose();
}
}

原来我的期望是不正确的。持久性规范测试只是测试数据到达数据库的位置——因此,它将在每次运行时发送新项

为了测试映射是否正确级联数据,我需要编写如下测试:

    [Test]
    public void CanSaveAndLoadFacilityMapping()
    {
        object id;
        object id2;

        using (var trans = _session.BeginTransaction())
        {
            id = _session.Save(_facility1);
            id2 = _session.Save(_facility2);

            trans.Commit();
        }

        _session.Clear();

        using (var trans = _session.BeginTransaction())
        {
            var facility = _session.Get<Facility>(id);
            var facility2 = _session.Get<Facility>(id2);

            Assert.AreEqual(facility.Name, _facility1.Name);
            Assert.AreEqual(facility.Owner.Name, _client.Name);
            Assert.AreEqual(facility2.Owner.Name, _client.Name);
            Assert.AreEqual(facility.Owner.Id, facility2.Owner.Id);

            trans.Dispose();
        }
    }
[测试]
public void可以保存并加载FacilityMapping()
{
对象id;
对象id2;
使用(var trans=\u session.BeginTransaction())
{
id=_session.Save(_facility1);
id2=_session.Save(_facility2);
trans.Commit();
}
_session.Clear();
使用(var trans=\u session.BeginTransaction())
{
var facility=_session.Get(id);
var facility2=_session.Get(id2);
Assert.AreEqual(facility.Name,_facility1.Name);
Assert.AreEqual(facility.Owner.Name,_client.Name);
Assert.AreEqual(facility2.Owner.Name,_client.Name);
Assert.AreEqual(facility.Owner.Id,facility2.Owner.Id);
trans.Dispose();
}
}