Ошибка ServiceStack OrmLite Multi Self References

Я пытаюсь загрузить ссылки, но в этом случае с двумя ссылками из одной таблицы это не работает

[Required]
public DateTime CreatedOn { get; set; }
public DateTime? ModifiedOn { get; set; }

[References(typeof(Employee))]
public int? CreatedById { get; set; }
[Reference]
public Employee CreatedBy { get; set; }

[References(typeof(Employee))]
public int? ModifiedById { get; set; }
[Reference]
public Employee ModifiedBy { get; set; }

Как вы можете видеть выше, я сделал это правильно, как документация ORMLite: https://github.com/ServiceStack/ServiceStack.OrmLite

Не загружаются свойства: ModifieldBy и CreatedBy, даже если свойства ModifiedById и CreatedById имеют значения. Я пытался с обязательными полями, и это работало, но когда я пытаюсь с INT? nulable это не работает.

На рисунке ниже вы можете видеть, что у меня есть одна запись со значением "5" в столбце ModifiedById, поэтому мои Loadreferences моего метода должны получить столбец: ModifiedBy (с загруженным объектом Employee) он работает в других случаях, не в этом дело.

1 ответ

Решение

Я добавил проходной тест, который проверяет несколько Self References с nullable int? Идентификаторы в этом коммите:

Используемые типы:

public class ParentSelfRef
{
    [AutoIncrement]
    public int Id { get; set; }

    [References(typeof(ChildSelfRef))]
    public int? Child1Id { get; set; }

    [Reference]
    public ChildSelfRef Child1 { get; set; }

    [References(typeof(ChildSelfRef))]
    public int? Child2Id { get; set; }

    [Reference]
    public ChildSelfRef Child2 { get; set; }
}

public class ChildSelfRef
{
    [AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }
}

Удалить и заново создать таблицы:

db.DropTable<ParentSelfRef>();
db.DropTable<ChildSelfRef>();

db.CreateTable<ChildSelfRef>();
db.CreateTable<ParentSelfRef>();

Создать запись с несколькими самостоятельными ссылками:

var row = new ParentSelfRef
{
    Child1 = new ChildSelfRef
    {
        Name = "Child 1"
    },
    Child2 = new ChildSelfRef
    {
        Name = "Child 2"
    },
};

Сохраните и протестируйте заполненный ряд:

db.Save(row, references: true);

row.PrintDump();

Assert.That(row.Id, Is.EqualTo(1));
Assert.That(row.Child1Id, Is.EqualTo(1));
Assert.That(row.Child1.Id, Is.EqualTo(1));
Assert.That(row.Child1.Name, Is.EqualTo("Child 1"));
Assert.That(row.Child2Id, Is.EqualTo(2));
Assert.That(row.Child2.Id, Is.EqualTo(2));
Assert.That(row.Child2.Name, Is.EqualTo("Child 2"));

Загрузить строку с собственными ссылками:

row = db.LoadSingleById<ParentSelfRef>(row.Id);

Assert.That(row.Id, Is.EqualTo(1));
Assert.That(row.Child1Id, Is.EqualTo(1));
Assert.That(row.Child1.Id, Is.EqualTo(1));
Assert.That(row.Child1.Name, Is.EqualTo("Child 1"));
Assert.That(row.Child2Id, Is.EqualTo(2));
Assert.That(row.Child2.Id, Is.EqualTo(2));
Assert.That(row.Child2.Name, Is.EqualTo("Child 2"));
Другие вопросы по тегам