New Breeze 1.4.9 - Дублируемая сущность - возможная ошибка?

Эта проблема возникла после того, как я обновился до Breeze 1.4.9.

У меня есть следующее лицо:

public class ProjectMember
{
 public int ProjectId { get; set; }
 [ForeignKey("ProjectId")]
 [InverseProperty("ProjectMembers")]
 public Project Project { get; set; }

 public int TeamMemberId { get; set; }
 [ForeignKey("TeamMemberId")]
 [InverseProperty("ProjectMembers")]
 public TeamMember TeamMember { get; set; }
}

И его конфигурация:

public class ProjectMemberConfiguration : EntityTypeConfiguration<projectmember>
{
 public ProjectMemberConfiguration()
 {
 HasKey(a => new { a.ProjectId, a.TeamMemberId });

 // ProjectMember has 1 project, projects have many projectmember records
 HasRequired(a => a.Project)
 .WithMany(s => s.ProjectMembers)
 .HasForeignKey(a => a.ProjectId)
 .WillCascadeOnDelete(true);
 }
}
</projectmember>

Метаданные выглядят так:

Я создаю этот объект на стороне клиента следующим образом:

manager.createEntity('ProjectMember', { projectId: projectId, teamMemberId: teamMemberId });

Все хорошо до сих пор, однако, когда этот объект сохраняется обратно серверу он получает дублируется на стороне клиента, как показано Белу (скриншот ниже показывает, что в кэше После saveChanges succeeded обратный вызов достигается.

ВОПРОС Почему Бриз дублирует эту сущность, хотя ее нельзя допускать?

РЕДАКТИРОВАТЬ

Я вернулся к Breeze 1.4.8, и проблема исчезла. Вот что содержит manager после операции сохранения:

1 ответ

Обновлено 7 марта 2014 года

Это была ошибка, и теперь она исправлена и доступна на GitHub. Он будет выпущен с полным почтовым индексом в течение ближайших нескольких дней. Любая версия выше 1.4.9 должна содержать исправление.

Оригинальное сообщение

Извините, я не могу сказать со скриншотов, что что-то дублируется. Вы видите два объекта в кеше EntityManager с тем же ключом, и если да, то как?. Вы также видите некоторую форму дублирования в базе данных?

Или проблема в том, что "новый" объект создается на клиенте после сохранения?

Возможно ли, что одна часть этих ключей является столбцом Identity в базе данных? Если это так, то стоит проверить метаданные, чтобы убедиться, что для свойства autoGeneratedKeyType для этого EntityType установлено значение Identity. Это приведет к тому, что база данных будет генерировать новый ключ для вставки, и этот объект затем будет отправлен обратно клиенту. Объединение этого объекта с его предыдущим воплощением произойдет только в том случае, если для параметра AutoGeneratedKeyType установлено значение Identity. В противном случае вы получите как исходный объект со старым ключом, так и клонированную версию своего нового ключа.

В противном случае, я думаю, нам нужна дополнительная информация.

licensed under cc by-sa 3.0 with attribution.