Предоставление типизированных свойств перечисления для полей сущностей инфраструктуры сущностей в контексте клиента ADO.NET Data Service - PullRequest
6 голосов
/ 15 июня 2009

У меня есть объект с полями, которые набираются int

и я хочу выставить эти поля как свойства, которые получают и получают значения типа enum для работы со строгим типом.

поэтому я создал новый частичный класс для сущности и добавил два свойства.

когда я пытаюсь создать новый экземпляр TestEntity и добавить его в контекст, и вызвать изменения сохранения я получаю следующее исключение:

Произошла ошибка при обработке этого запроса. в System.Data.Services.Client.DataServiceContext.SaveAsyncResult.HandleBatchResponse () в System.Data.Services.Client.DataServiceContext.SaveAsyncResult.EndRequest () в System.Data.Services.Client.DataServiceContext.SaveChanges (параметры SaveChangesOptions) в System.Data.Services.Client.DataServiceContext.SaveChanges ()

внутреннее исключение:

System.InvalidOperationException: тип 'enum1' не имеет настраиваемых свойств. в System.Data.Services.Client.ClientType..ctor (Тип типа, Строка typeName, Логическое skipSettableCheck) в System.Data.Services.Client.ClientType.Create (Тип тип, логическое ожиданиеModelType) в System.Data.Services.Client.DataServiceContext.WriteContentProperties (средство записи XmlWriter, тип ClientType, ресурс объекта) в System.Data.Services.Client.DataServiceContext.CreateRequestData (поле ResourceBox, логическая новая строка) в System.Data.Services.Client.DataServiceContext.SaveAsyncResult.CreateChangeData (индекс Int32, логическая новая строка) в System.Data.Services.Client.DataServiceContext.SaveAsyncResult.BeginNextChange (Boolean replaceOnUpdate)

поэтому я решил, что он пытается отразить свойства перечисления как свойства классов. как я могу заставить контекст игнорировать эти свойства, когда он пытается отражать их.

Я использую VS 2008 team suite sp1, SQL Server 2008, .Net 3.5 Sp1.

Справка.

частичный код класса:

public partial class TestEntity
{     
    public enum1 Field1
    {
        get
        {
            return (enum1)field1;
        }
        set
        {
            field1 = (Int16)value;
        }
    }

    public enum2 Field2
    {
        get
        {
            return (enum2)field2;
        }
        set
        {
            field2 = (Int16)value;
        }
    }   
}    

1 Ответ

2 голосов
/ 13 февраля 2010

Не думаю, что ты можешь. В ADO.Net Data Services у вас не может быть перечислений на ваших прокси-объектах, которые отправляются на сервер. Попробуйте изменить свой объект, чтобы использовать вместо него int (или short).

...