Silverlight 4 с RIA - привязка объединенного поля таблицы к сетке

У меня есть 2 таблицы, которые имеют отношение 1-1. Я пытаюсь использовать.Include() для LINQ, чтобы попытаться передать сущность дочерней таблицы в свойство, чтобы я мог связать поле дочерней таблицы с сеткой вместе с полями. из родительской таблицы. Первоначально он работает нормально, как это, и я могу привязать к сетке, но получить результаты только из таблицы BUGroupBuildings. Мне также нужно привязать к полю в таблице vwBuisnessUnits.

 public IQueryable<BUGroupBuilding> GetBusinessUnitsBasedOnGroupID(int i)
    {
        var result = from d in this.ObjectContext.BUGroupBuildings
                     join b in this.ObjectContext.vwBusinessUnits on d.BU equals b.BU
                     where d.BUGroupID == i
                     orderby d.BU ascending
                     select d;

        return result;

    }

Когда я переключаюсь, чтобы использовать Включить для возврата дочерних полей таблицы, я получаю сообщение об ошибке

  public IQueryable<BUGroupBuilding> GetBusinessUnitsBasedOnGroupID(int i)
    {
        var result = from d in this.ObjectContext.BUGroupBuildings
                     .Include("vwBuisnessUnits")
                     select d;
        result = result.Where(w => w.BUGroupID == i).OrderBy(o => o.vwBusinessUnit.BU);

        return result;

    }

ОШИБКА:

Не удалось выполнить операцию загрузки для запроса "GetBusinessUnitsBasedOnGroupID". Указанный путь включения недействителен. EntityType 'EQUITYDWModel.BUGroupBuilding' не объявляет свойство навигации с именем 'vwBuisnessUnits'

Вот моя сущность

Я добавил необходимые [Включить] в метаданные.

    [MetadataTypeAttribute(typeof(BUGroupBuilding.BUGroupBuildingMetadata))]
public partial class BUGroupBuilding
{

    internal sealed class BUGroupBuildingMetadata
    {

        // Metadata classes are not meant to be instantiated.
        private BUGroupBuildingMetadata()
        {
        }

        public string BU { get; set; }
        [Include]
        public BUGroup BUGroup { get; set; }

        public int BUGroupBuildingsID { get; set; }

        public Nullable<int> BUGroupID { get; set; }
        [Include]
        public vwBusinessUnit vwBusinessUnit { get; set; }

    }
}

2 ответа

Вы сгенерировали EntityModel из базы данных или создали ее вручную? Вы создаете класс метады вручную?

Может быть, некоторые не правы. Необходимо создать свойство навигации на стороне клиента (файл Web.g.cs) следующим образом:

/// <summary>
        /// Gets or sets the associated <see cref="tblCustomer"/> entity.
        /// </summary>
        [Association("tblCustomer_tblInvoice", "uiCustomerId", "Id", IsForeignKey=true)]
        [XmlIgnore()]
        public tblCustomer tblCustomer
        {
            get
            {
                if ((this._tblCustomer == null))
                {
                    this._tblCustomer = new EntityRef<tblCustomer>(this, "tblCustomer", this.FiltertblCustomer);
                }
                return this._tblCustomer.Entity;
            }
            set
            {
                tblCustomer previous = this.tblCustomer;
                if ((previous != value))
                {
                    this.ValidateProperty("tblCustomer", value);
                    if ((previous != null))
                    {
                        this._tblCustomer.Entity = null;
                        previous.tblInvoices.Remove(this);
                    }
                    if ((value != null))
                    {
                        this.uiCustomerId = value.Id;
                    }
                    else
                    {
                        this.uiCustomerId = default(Guid);
                    }
                    this._tblCustomer.Entity = value;
                    if ((value != null))
                    {
                        value.tblInvoices.Add(this);
                    }
                    this.RaisePropertyChanged("tblCustomer");
                }
            }
        }

Пожалуйста, проверьте модель сущности и отношения.

Ааа. Я нашел решение своей проблемы. Думал, что поделюсь этим с сообществом. Оказывается, что я должен сделать соединение и Inlcude в запросе linq, когда у меня есть пользовательские отношения между 2 сущностями (в моем случае, представлением и таблицей). Когда отношение определено в модели, оно не требует явного соединения.

  public IQueryable<BUGroupBuilding> GetBusinessUnitsBasedOnGroupID(int i)
    {
        var result = from d in this.ObjectContext.BUGroupBuildings
                     join b in this.ObjectContext.vwBusinessUnits on d.BU equals b.BU
                     where d.BUGroupID == i
                     orderby d.BU ascending
                     select d;


        var r2 = from d2 in ((ObjectQuery<BUGroupBuilding>)result)
                 .Include("vwBusinessUnit")
                 select d2;

        return r2;            
    }
Другие вопросы по тегам