微风中可能存在的错误

时间:2012-12-04 08:24:50

标签: breeze

我想我发现了一个错误。

我正在做的是以下内容:

  1. 我创建了一个新实体并将该实体添加到管理器中。

    var createConexion = function (origen, destino) {
        var metadataStore = manager.metadataStore;
        var conexionType = metadataStore.getEntityType("ConexionPalanca");
        var newConexion = conexionType.createEntity();
    
        newConexion.PalancaDestinoID(destino.PalancaID());
        newConexion.PalancaOrigenID(origen.PalancaID());
        newConexion.Activa(true);
    
        manager.addEntity(newConexion);
    
        return newConexion;
    };
    
  2. 取消更改。

    var cancelChanges = function () {
        return manager.rejectChanges();
    };
    
  3. 我运行本地查询。

        var getConexiones = function () {
            var query = EntityQuery.from("ConexionesPalancas");
            return manager.executeQueryLocally(query);
        };
    
  4. 执行这些步骤调用executeQueryLocally时出现以下错误:

    Uncaught TypeError: Can not read property 'entityAspect' of null at line 9249 (breeze.js)
    

    我正在使用微风0.74.2

    编辑:这是我正在使用的模型:

    public class Palanca {
        public int PalancaID { get; set; }
        /*More properties ommited*/
        public virtual ICollection<ConexionPalanca> ConexionesSalientes { get; set; }
        public virtual ICollection<ConexionPalanca> ConexionesEntrantes { get; set; }
    }
    
    public class ConexionPalanca {
        public int PalancaOrigenID { get; set; }
        public virtual Palanca PalancaOrigen { get; set; }
    
        public int PalancaDestinoID { get; set; }
        public virtual Palanca PalancaDestino { get; set; }
        public string Anchor { get; set; }
    }
    
    public class PalancaConfiguration : EntityTypeConfiguration<Palanca> {
        public PalancaConfiguration() : base() {
        HasKey( p => p.PalancaID );
        Property( p => p.PalancaID )
                .IsRequired()
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasMany( p => p.ConexionesSalientes ).WithRequired( cp => cp.PalancaOrigen).HasForeignKey(cp=>cp.PalancaOrigenID);
        HasMany( p => p.ConexionesEntrantes ).WithRequired( cp => cp.PalancaDestino).HasForeignKey( cp => cp.PalancaDestinoID ).WillCascadeOnDelete(false);
        }
    }
    
    public class ConexionPalancaConfiguration : EntityTypeConfiguration<ConexionPalanca> {
        public ConexionPalancaConfiguration() {
            HasKey( cp => new {cp.PalancaOrigenID, cp.PalancaDestinoID} );
    
            HasRequired( cp => cp.PalancaOrigen ).WithMany( p => p.ConexionesSalientes ).HasForeignKey( cp => cp.PalancaOrigenID );
            HasRequired( cp => cp.PalancaDestino ).WithMany(p=>p.ConexionesEntrantes).HasForeignKey( cp => cp.PalancaDestinoID );
        }
    }
    

2 个答案:

答案 0 :(得分:1)

这是一个错误。它已在v 0.74.3中修复,可通过breeze网站或通过nuget获得。如果这可以解决问题,请告诉我们。

答案 1 :(得分:0)

我遇到了类似的错误。原来这个bug就在我身边。您似乎正在设置连接表。确保使用foreignKey属性(或流畅的API)正确配置了模型。 你为什么要自己设置ID,如果不是这样,让微风处理它?

newConexion.PalancaDestinoID(destino); <---
newConexion.PalancaOrigenID(origen);   <---
newConexion.Activa(true);

以下效果很好:

createTeamUser = function (user, team, temporary) {
            var teamUserType = metadataStore.getEntityType("TeamUsers");
            var newTeamUser = teamUserType.createEntity();
            newTeamTemp = manager.addEntity(newTeamUser);
            newTeamUser.Team(team);
            newTeamUser.User(user);



            user.TeamUsers().push(newTeamTemp); 
            team.TeamUsers().push(newTeamTemp);
            return newTeamTemp;
        },

使用此模型:

public class TeamUsers
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long TeamUsersId { get; set; }

    public long TeamId { get; set; }
    [ForeignKey("TeamId")]
    [InverseProperty("TeamUsers")]
    public Team Team { get; set; }

    public long UserId { get; set; }
    [ForeignKey("UserId")]            //<---- Withour these attributes i got a null error too 
    [InverseProperty("TeamUsers")]    //<---- 
    public User User { get; set; }

    public bool Temporary { get; set; }

    //[Timestamp]
    //public byte[] TimeStamp { get; set; }
}

User模型中使用此字段:

 [InverseProperty("User")]
    public ICollection<TeamUsers> TeamUsers { get; set; }

问题:Julianyus在将新实体添加到管理器之前添加了导航属性。他正在detached实体上设置属性。据我所知,breeze-Docs与实体完成的所有事情都应该在将其添加到经理/现金之后。在添加到缓存之前使用实体是否安全?