2013-07-22 2 views
1

Два дня, потраченные на это до сих пор. Это сводит меня с ума.Бриз не включая связанные объекты

Некоторого связанный с кодовым первым рамочным объектом класс:

public class Schedule 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid RowId { get; set; } 
    public DateTime Start { get; set; } 
    public DateTime End { get; set; } 
    public virtual ICollection<Charge> Charges { get; set; } 
} 

public class Charge 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid RowId { get; set; } 
    public decimal ChargeableRate { get; set; } 
    public DevType DevType { get; set; } 
    public Schedule Schedule { get; set; } 
} 

public class DevType 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid RowId { get; set; } 
    public string Type { get; set; } 
    public virtual ICollection<Charge> Charge { get; set; } 
} 

Я прошу рамку сущности для графика, как это:

 _schedule Schedule = _myContext.Schedules 
       .Include("Charges.DevType") 
       .Where(cs => cs.Start < dateWindow && cs.End > dateWindow) 
       .First(); 

И я вернусь все, что нужно. Когда сериализован для Json для веб-службы, все выглядит отлично и денди, и все данные, как указано выше.

Однако, как только он передается Бризу, я теряю объекты DevType в нижней части стека. Они не нулевые или пустые, они просто НЕ ТАМ.

Приостановка в браузере и сверление в metadataStore._entityResourceMap вы можете найти зарегистрированный DevType, поэтому Бриз четко знает, что он существует как часть модели. Он просто не может видеть отношения между Charge и DevType, поэтому игнорирует его.

Я пробовал все виды вещей - регистрации отношения в явной форме EF (странно приводит к добавленным пустым столбцам в базе данных), используя команду .expand в Breeze, чтобы заставить его нагрузку:

function getCurrentChargingSchedule() { 
var query = breeze.EntityQuery.from('GetCurrentSchedule').expand('Charge.DevType'); 
return manager.executeQuery(query); 
}; 

Ничего из этого не имеет значения.

Ближайший я получил удалял виртуальную ICollection заряда от DEVTYPE и вместо маркировки его:

[Key, ForeignKey("Charge"), DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

Это не кажется правильным - есть много, чтобы одна связь, поэтому я не следует удалять ICollection. И неудивительно, что запросы к EF с этим на месте всегда возвращались. Задавайте объекты с DevType: null. Но по этому сценарию Бриз действительно забирал DevTypes - это просто, что они, очевидно, были нулевыми.

Я нахожусь на грани разрыва Бриз здесь и полагаюсь непосредственно на мой веб-сервис для передачи данных. Может кто угодно, пожалуйста, помогите?

ответ

0

Вы пробовали загрузить обвинения с помощью Expand?

function getCurrentChargingSchedule() { 
    var query = breeze.EntityQuery.from('GetCurrentSchedule').expand('Charges, Charges.DevType'); 
    return manager.executeQuery(query).fail(queryFailed); 
}; 

function queryFailed (error) { 
    console.log(error.message); 
} 

Навигационная свойство Schedule> Сборы, так что вы должны загрузить их с полным именем (плата)

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