Ошибка отображения таблицы на подкласс при получении - PullRequest
0 голосов
/ 08 февраля 2012

Код компилируется нормально, но NUnit не проходит тесты со следующей ошибкой:
09: 59: 00,789 ОШИБКА [TestRunnerThread] AbstractBatcher [(null)] - не удалось выполнить запрос: ВЫБЕРИТЕ workflow0_.Id в качестве Id13_0_, workflow0_.Name как Name13_0_, workflow0_.ModifiedById в качестве измененного 3_13_0_, workflow0_0.IdId CreatedB5_13_0_, workflow0_.CreatedDate as CreatedD6_13_0_, workflow0_.Version в качестве Version13_0_, workflow0_.WorkflowTemplateID как Workflow8_13_0_, workflow0_1_.PBMId как PBMId14_0_, как workflow0 0_0, тогда как workflow0_0 является нулевым, если для workflow0_0 используется значение_0_1, то в случае, когда workflow0_0 является нулевым_обозначением_обозначения_обозначения_обозначения_обозначения_обозначения_обозначения_обозначения_процедура_0_0_0_0_0_0_0_1_0_1_0_1_0_1_0_1_0_1_1 0 workflow0_ оставил внешнее соединение WorkflowRDSCostReport workflow0_1_ на workflow0_.Id = workflow0_1_.Workflow_id WHERE workflow0_.Id=@p0 System.Data.SqlClient.SqlException (0x80131904): недопустимое имя столбца 'Workflow_id'.

Тесты будут работать нормально, если я урону файл, содержащий отображение подкласса. Родителем является рабочий процесс с «Id» в качестве столбца PK. Дочерний объект - WorkflowRDSCostReport с «WorkflowId» как отношение PK & FK. WorkflowTemplate - это отдельная таблица, которая отлично работает. Код:

Workflow.cs:

public class Workflow: EditableEntityBase<int>
{
    #region properties

    public virtual WorkflowTemplate WorkflowTemplate { get; set; }
    public virtual string Name { get; set; }

    #endregion properties
}

WorkflowRDSCostReport.cs:

public class WorkflowRDSCostReport : Workflow
{
    #region properties

    public virtual int PBMId { get; set; }

    #endregion properties
}

WorkflowMap.cs:

public class WorkflowMap: ClassMap<Workflow>
{
    public WorkflowMap()
    {
        Table("Workflow");

        Id(x => x.Id, "Id")
            .GeneratedBy.Identity();

        References(x => x.WorkflowTemplate, "WorkflowTemplateID")
           .Not.Nullable()
           .Not.LazyLoad()
           .Cascade.None();

        //Name
        Map(x => x.Name, "Name")
            .Nullable();

        //ModifiedById
        Map(x => x.ModifiedById, "ModifiedById")
            .Not.Nullable();
        //ModifiedDate
        Map(x => x.ModifiedDate, "ModifiedDate")
            .CustomType(typeof(DateTime))
            .Not.Nullable();
        //CreatedById
        Map(x => x.CreatedById, "CreatedById")
            .Not.Nullable();
        //CreatedDate
        Map(x => x.CreatedDate, "CreatedDate")
            .CustomType(typeof(DateTime))
            .Not.Nullable();
        //Version
        Map(x => x.Version, "Version")
            .Not.Nullable();
    }
}

WorkflowRDSCostReportMap.cs:

public class WorkflowRDSCostReportMap : SubclassMap<WorkflowRDSCostReport>
{
    public WorkflowRDSCostReportMap()
    {
        Table("WorkflowRDSCostReport");

        Map(x => x.PBMId, "PBMId")
            .Not.Nullable();
    }
}

WorkflowRepository.cs:

public class WorkflowRepository : RepositoryBase<Workflow, int>
{
    public WorkflowRepository() : base() { }
}

WorkflowRepositoryTest.cs:

namespace Test
{
[TestFixture]
public class WorkflowRepositoryTest
{
    #region Class Members

    private Workflow _workflow;
    private WorkflowRepository _workflowRepository;
    private WorkflowTemplate _workflowTemplate;
    private WorkflowTemplateRepository _workflowTemplateRepository;

    private WorkflowRDSCostReport _workflowRDSCostReport;

    #endregion Class Members


    #region Setup

    [TestFixtureSetUp]
    public void TestFixtureSetup()
    {
        RepositoryBase.UseDevDatabase = true;

        _workflowTemplate = TestHelper.CreateWorkflowTemplate();
        _workflowTemplateRepository = new WorkflowTemplateRepository();
        _workflowTemplateRepository.Save(_workflowTemplate);
    }

    [SetUp]
    public void SetUp()
    {
        _workflow = TestHelper.CreateWorkflow(_workflowTemplate);
        _workflowRepository = new WorkflowRepository();

        _workflowRDSCostReport = TestHelper.CreateWorkflowRDSCostReport();
    }

    #endregion Setup
    [Test]
    public void DeleteTest()
    {
        _workflowRepository.Save(_workflow);
        Workflow readEntity = _workflowRepository.Fetch(_workflow.Id);
        Assert.NotNull(readEntity);

        _workflowRepository.Delete(_workflow);

        readEntity = _workflowRepository.Fetch(_workflow.Id);
        Assert.IsNull(readEntity);
        _workflow = null;
    }

 #region TearDown

    [TearDown]
    public void TearDown()
    {
        if (_workflow != null)
        {
            _workflowRepository.Delete(_workflow);
        }

        if (_workflowRDSCostReport != null)
        {
            _workflowRepository.Delete(_workflowRDSCostReport);
        }
    }

    [TestFixtureTearDown]
    public void TestFixtureTearDown()
    {
        _workflowTemplateRepository.Delete(_workflowTemplate);
    }

    #endregion // TearDown
}
}
...