Заполнение поля из таблицы перечисления

У меня есть следующие таблицы

Entity
id, name, categoryid
21, "Blah", 1

EntityCategory (таблица перечислений)
id, name
1, "New Blahs"

У меня есть отношения FK между Entities-> categoryid и EntityCategories-> id

Я создал классы SubSonic для обоих, а также соответствующий объект модели для Entity
class Entity {ID, Name, CategoryName}

Я пытаюсь вернуть тип Model.Entity с заполненным именем категории, т.е.

public Entity GetEntityByName(string name){
  return new 
    Select(
      Entity.IdColumn,    
      Entity.NameColumn,
      EntityCategory.NameColumn)
   .From(Entity.Schema)
   .InnerJoin(Tables.EntityCategory)
   .Where(Entity.NameColumn).IsEqualTo(name)
   .ExecuteSingle<Model.Entity>();

Излишне говорить, что это не работает. Я действительно получаю Model.Entity с Entity.Name, установленным в EntityCategoryName.


person kjgilla    schedule 13.04.2009    source источник


Ответы (1)


Если вы используете SubSonic 3.0, вы можете сделать это с помощью проекции:

var result = from e in db.Entities
where e.ID=1
select new Entity{
   ID=e.ID,
   name=e.Name, 
   CategoryName=(CategoryName)e.CategoryID
}

С SubSonic 2.x я бы сказал, чтобы упростить себе жизнь и расширить частичный класс с помощью перечисления только для чтения:

public partial class Entity{
   public CategoryName{
     return (CategoryName)this.CategoryID;
   }
}
person Community    schedule 13.04.2009