2013-03-04 5 views
1

У меня есть простая объектная модель общественного класса Лицензия {навигационных свойств не сберегательные

[Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [ScaffoldColumn(false), StringLength(20)] 
    public string CreationUserId { get; set; } 

    [ScaffoldColumn(false), StringLength(20)] 
    public string LastModifiedUserId { get; set; } 

    public string LicenseName { get; set; } 

    public LicenseType LicenseType { get; set; } 

    public State State { get; set; } 

    public DateTime DateIssued { get; set; } 

    public int ValidFor { get; set; } 


} 

public class State 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [ScaffoldColumn(false), StringLength(20)] 
    public string CreationUserId { get; set; } 

    [ScaffoldColumn(false), StringLength(20)] 
    public string LastModifiedUserId { get; set; } 

    [StringLength(2)] 
    [Required] 
    public string Name { get; set; } 

    [Display(Name = "Long Name")] 
    [Required, StringLength(25)] 
    public string LongName { get; set; } 
} 

public class LicenseType 
{ 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [ScaffoldColumn(false), StringLength(20)] 
    public string CreationUserId { get; set; } 

    [ScaffoldColumn(false), StringLength(20)] 
    public string LastModifiedUserId { get; set; } 

    [StringLength(100), Required] 
    public string Description { get; set; } 
} 

Я использую горячее полотенце шаблона ветер, Дюрандальте, нокаут. У меня есть простое представление добавить модель

var _licenseAdded = false; 
var vm = { 

    states: ko.observableArray(context.states), 
    licenseTypes: ko.observableArray(context.licenseTypes), 

    viewAttached: function() { 
     var self = this; 
     $('input[name^="date"]').datepicker(); 
     $('#validFor').spinner({ 
      min: 365, 
      max: 3650, 
      step: 30 
     }); 
     log('add Attached', null, true); 

    }, 

    activate: function() { 
     var self = this; 
     self.original = context.manager.createEntity('License', { licenseName: 'Testing321', dateIssued: moment().format('L') }, null); 
     log('add Activated', null, true); 


    }, 
    canDeactivate: function() { 
     if (_licenseAdded === false) { 
      return app.showMessage('Are you sure you want to leave this page?', 'Navigate', ['Yes', 'No']); 
     } else { 
      return true; 
     } 
    }, 
    saveChanges: function() { 

     $.when(context.saveNewLicense()).done(function() { 
      _licenseAdded = true; 

     }); 
     router.navigateTo('home'); 
    }, 
    original: undefined 

}; 
return vm; 

А вот мой add.html, все перевязывает отлично и работает прекрасно до сохранения.

Когда я звоню SaveChanges saveBundle, посылаемые к контроллеру не прилагается нет навигационных свойств, которые позволяют для правильного государства и Тип лицензии, чтобы хранить я только получаю: saveBundle { «сущности»: [ { «Id»: -1, "CreationUserId": нулевой, "LastModifiedUserId": нулевой, "LicenseName": "новый для тестирования", "DateIssued": "2013-03-11T04: 00: 00Z", "ValidFor": 0, "entityAspect": { "entityTypeName": "Лицензия: # Volt.Telecom.Licensing.Models", "entityState": "Added", "originalValuesMap": {}, "autoGeneratedKey": { "PropertyName": "Идентификатор", "autoGeneratedKeyType": "идентичность" } } } ], "SaveOptions": { "allowConcurrentSaves" : false } }

Не думайте, что я могу получить гораздо больше ванили, чем это. Почему это может произойти? Когда я отлаживаю на клиенте, свойства state и licenseType navigationProperties верны и имеют правильные значения.

ответ

0

Я думаю, что проблема заключается в том, что ваша модель EF использует «Независимые ассоциации» вместо «Ассоциации внешних ключей» (ассоциации внешних ключей являются стандартными EF). Нам нужно лучше документировать это предположение.

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

Обратитесь к следующей статье MSDN для более фона: foreign-keys-in-the-entity-framework

+0

, который был вопрос я так привык не делать, что теперь я проглядел его в документации. – mgbee