2013-07-05 1 views
1

Я использую последние ночные сборки ASP.NET. На моем REST API (на основе EntitySetController), когда я пытаюсь $ расширить свойство навигации, которая является нулем в базе данных, я получаю следующее сообщение об ошибке:

"message": "The EDM instance of type '[Communicator.Model.ContentTemplateGroup Nullable=True]' is missing the property 'GUID'.", 
"type": "System.InvalidOperationException", 
"stacktrace": " at System.Web.Http.OData.EntityInstanceContext.GetPropertyValue(String propertyName) 

Rest называют Im Macking является:

/ContentTemplate?$expand=ContentTemplateGroup 

Это происходит только при наличии экземпляров ContentTemplate без существующей в базе данных ContentTemplateGroup (null FK). Для ContentTemplates, содержащего ContentTemplateGroup, $ expand работает отлично. Мои объекты выглядят следующим образом:

public class ContentTemplate: IIdentifier 
{ 
    public int? Id { get; set; } 

    [Required] 
    public Guid GUID { get; set; } 

    public virtual ContentTemplateGroup ContentTemplateGroup { get; set; } 
    public virtual ICollection<ContentTemplateField> ContentTemplateFields { get; set; } 
} 

public class ContentTemplateGroup : IIdentifier 
{ 
    public int? Id { get; set; } 

    [Required] 
    public Guid GUID { get; set; } 

    [Required] 
    public string Name { get; set; } 

    public virtual IList<ContentTemplate> ContentTemplate { get; set; } 
} 

Я не получаю эту ошибку, когда пытаюсь расширить свойства навигации с помощью коллекций. После работы как шарм:

http://localhost:64316/rest/ContentTemplate?$expand=ContentTemplateFields 

Update: (? Int) Перед выполнением лица первичных ключей обнуляемого я получаю другую ошибку на тот же контекст проблемы. Ошибка была:

"message": "The cast to value type 'System.Int32' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.", 
"type": "System.InvalidOperationException", 
"stacktrace": " at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)\r\n at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal)\r\n at lambda_method(Closure , Shaper)\r\n at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)\r\n at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()\r\n at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()\r\n at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, ODataWriter writer, ODataSerializerContext writeContext) 
+0

Я пробовал много трюков в течение 2 дней, играя с настройками «DbContext.Configuration.ProxyCreationEnabled» без везения ... В последней строке кода ODataEntityTypeSerializer 224 я вижу, что есть чек для null, но мне интересно почему все еще не удается. См. Здесь: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http.OData/OData/Formatter/Serialization/ODataEntityTypeSerializer.cs – Hasith

ответ

3

Это известная проблема (1043: $expand fails when the navigation property being expanded is null). Для этого я сейчас проверил fix. Можете ли вы взять нашу последнюю ночную сборку завтра и подтвердить, что проблема исчезла?

+0

Работает как очарование .. Вы спас нас от кучи хаков, которые мы использовали! Продолжайте в том же духе!! – Hasith

Смежные вопросы