А может ли мне помочь BLToolkit в таком сценарии:
Есть табличка goods, в которой общие поля для всех товаров
Есть таблички books, video, в которых есть поля специфичные для книг и видео.
Покажу на примере:
[TableName("goods")]
[InheritanceMapping(Code = (int)EntityEnum.Books, Type = typeof(Book))]
[InheritanceMapping(Code = (int)EntityEnum.Video, Type = typeof(Video))]
public abstract class Good : EditableObject<Good>
{
[Identity, PrimaryKey]
public abstract int GID { get; set; }
[MapField(MapName="entity_id", IsInheritanceDiscriminator=true)]
public abstract EntityEnum EntityID { get; set; }
[MapField("title_ru")]
public abstract String TitleRu { get; set; }
}
[TableName("books")]
public abstract class Book : Good
{
/// <summary>
/// Количество страниц у книги
/// </summary>
[MapField("pages")]
public abstract int? Pages { get; set; }
}
[TableName("video")]
public abstract class Video : Good
{
/// <summary>
/// Год выхода фильма
/// </summary>
[MapField("video_year")]
public abstract int YearOfVideo { get; set; }
}
Соответственно, я бы хотел используя BLToolkit выбирать из базы эти объекты.
C LINQ я даже не понял, вообще, как составлять такой запрос, но и простой SQL, заданный ручками, так же не заработал:
var sql = "SELECT * FROM goods AS g "
+ "LEFT JOIN books AS b ON (b.gid=g.gid AND g.entity_id = 1) "
+ "LEFT JOIN video AS v ON (v.gid=g.gid AND g.entity_id = 2) "
+ "WHERE g.GID=1"; // я не знаю, что именно за объект с GID==1
db.SetCommand(sql);
var good = db.ExecuteObject(typeof (Good));
в goods я бы хотел получить объекты типов в зависимости от InheritanceDiscriminator.
Ну и соответствующие запросы db.ExecuteList<Good>()...