Ошибка «Попытка отследить сущность или сложный тип не удалась, поскольку сущность или сложный тип» - PullRequest
1 голос
/ 30 августа 2011

Я создал веб-приложение ASP.NET (для использования службы данных WCF) и добавил ссылку на службу в http://services.odata.org/Northwind/Northwind.svc. Создание веб-страницы (.aspx) и добавил элемент управления GridView и Button.

Написал следующий код:

protected void Button1_Click(object sender, EventArgs e)
{
    var o = new NorthwindSvcRef.NorthwindEntities(new Uri("http://services.odata.org/Northwind/Northwind.svc"));

    //The following works fine
    //------------------------
    //var q = o.Customers.Where(c => c.City == "London").ToList();
    //GridView1.DataSource = q;
    //GridView1.DataBind();


    //Following does not work
    //-----------------------
    var q = o.Customers
       .Where(c => c.City == "London")
       .Select(c => c);

    DataServiceCollection<Customer> oCustomers = new DataServiceCollection<Customer>(q);
    GridView1.DataSource = oCustomers;
    GridView1.DataBind();
}

После выполнения вышеуказанного кода возникает следующая ошибка:

Попытка отследить сущность или сложный тип не удалась, потому что сущность или сложный тип 'NorthwindSvcRef.Customer' не реализует интерфейс INotifyPropertyChanged.

Может кто-нибудь помочь мне в этом?

Заранее спасибо

Ответы [ 4 ]

3 голосов
/ 10 сентября 2013

Попробуйте использовать перегрузку DataServiceCollection<T> Constructor (IEnumerable<T>, TrackingMode) и используйте перечислитель TrackingMode.None.

, например

DataServiceCollection<MyTable> MyDataServiceCollection = new DataServiceCollection<MyTable>(qry, TrackingMode.None);
0 голосов
/ 07 декабря 2011

У меня была эта проблема, но она могла быть вызвана тем фактом, что мои сущности имели только права на чтение и, следовательно, не должны были уведомлять о каких-либо изменениях.

И DataServiceCollection обеспечивает уведомление об изменениях, таким образом, происходит ошибка.

0 голосов
/ 10 января 2012

Когда вы генерируете ссылку на службу с помощью Visual Studio в проекте веб-приложения ASP.NET, интерфейс INotifyPropertyChange не реализуется в сгенерированных прокси-классах, и поэтому вы получаете эту ошибку.Самое простое решение - создать ссылку на службу в другом типе проекта (например, WPF или Windows Forms - INotifyPropertyChanged будет реализован автоматически), а затем скопировать файл «Reference.cs» в ваше веб-приложение (вам может потребоваться изменить пространство имен внутри этого файла).Следует помнить только о том, что в будущем не следует создавать ссылку на службу из проекта веб-приложения, поскольку файл «Reference.cs» будет перезаписан, а ошибка вернется.

0 голосов
/ 15 сентября 2011

Укажите

config.useverboseerrors = true в вашем service.cs

Это поможет вам.

...