У меня возникли трудности с заполнением некоторых столбцов в POCO с использованием OrmLite. У меня три таблицы по имени Dog, Bowl и DogBowl. DogBowl - это таблица соединений и содержит идентификатор Dog and Bowl.OrmLite Выбор нескольких столбцов Входящие таблицы
Dogs
PK Id: int, not null
Breed: varchar(20), not null
Name: varchar(20), not null
Bowls
PK Id: int, not null
Type: varchar(20), not null
Color: varchar(20), not null
Dogs_Bowls
PK: DogId, not null
PK: BowlId, not null
Вот POCO которые я сопоставляются
public class Dog : IHasId<int>
{
[AutoIncrement]
public int Id { get; set; }
[Required]
public string Breed { get; set; }
[Required]
public string Name { get; set; }
}
public class Bowl : IHasId<int>
{
[AutoIncrement]
public int Id { get; set; }
[Required]
public string Type { get; set; }
[Required]
public string Color { get; set; }
}
public class DogBowl
{
[Required]
public int DogId { get; set; }
[Required]
public int BowlId { get; set; }
[Ignore]
public string DogName { get;set; }
[Ignore]
public string BowlColor { get;set; }
}
Это C# код я бегу.
var dogBowl = db.Select<DogBowl>(db
.From<Dog>()
.Join<Dog, DogBowl>((d, db) => d.Id == db.DogId)
.Join<DogBowl, Bowl>((db, b) => db.BowlId == b.Id)
.Where<Dog>(d => d.Id == 5))
.ToList();
SQL, я хотел бы, чтобы произвести это:
select
db.DogId,
db.BowlId,
d.Name AS DogName,
b.Color as BowlColor
from DogBowl db
join dog d on db.DogId = d.Id
join bowl b on db.BowlId = b.Id
where d.Id = 5
Моя проблема заключается в том, что свойства DogBowl.DogName и DogBowl.BowlColor являются недействительными после выполнения кода. Я использую инструкции, приведенные в разделе https://github.com/ServiceStack/ServiceStack.OrmLite, из раздела «Выбор нескольких столбцов в соединенных таблицах», но он не работает. Как я могу получить свойства DogBowl.DogName и DogBowl.BowlColor?
OK это имеет смысл. Я пытался повторно использовать мой DogBowl poco, чтобы избавить себя от необходимости создавать другой класс. Теперь я вижу, что атрибут Ignore полностью игнорирует заполнение этих полей любым использованием poco. Я закончил переименование DogBowl poco на DogBowlJunction, чтобы провести DogId и BowlId, а затем создал новый poco с именем DogBowl для хранения свойств DogId, BowlId, DogName и BowlColor. – Halcyon