Свойство "Ссылки" не видно на стороне клиента - PullRequest
0 голосов
/ 20 сентября 2010

Так что, как обычно, у меня проблема с сервисом ria + nhibernate. Вопрос в том, как сделать свойство объекта отображается с использованием «ссылок», видимых на стороне клиента. Проблема в том, что при загрузке объекта без этого поля и попытайтесь сохранить его, тогда пропущенные значения обновляются как NULL внутри БД. Вот схема класса:

 public class A
{
            public virtual ComplexProperty property {get;set;}
}

public class AMap
{
  public  AMAP()
  {
   References(p=>p.property).Nullable().Column(“COMPLEX_PROPERTY_ID”);
  }
}

(я пропустил детали со свойством сопоставления / объявления ключа, так как оно сделано внутри базовых классов) Обычный трюк с атрибутом include и association (как в HasMany) не работает, так как внутри нет никакого свойства foreign_key класс А

1 Ответ

0 голосов
/ 22 сентября 2010

нашел решение, которое работает на меня. Достаточно добавить «ложное» свойство внешнего ключа в класс А, который не сопоставлен с базой данных. Это позволяет определить ассоциацию:

       public class A
       {
           [Include]
           [Association("Relation1","ComplexPropertyId","Id")]
           public virtual ComplexProperty property {get;set;}
           public virtual int ? ComplexPropertyId {get;set;}
       }

Последнее, что нужно сделать, это установить ComplexPropertyId вручную на стороне клиента после извлечения объектов из БД (отображения остаются такими же, как были).

public IQueryable<A> GetA()
{
 var item = repository.Query<A>();
 foreach(var a in item) a.ComplexPropertyId = a.ComplexProperty.Id;
 return item;
}
...