0

バグを見つけたと思います。

私がしていることは次のとおりです。

  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);
        };
    

これらの手順を実行すると、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 );
    }
}
4

2 に答える 2

1

これはバグでした。これはv0.74.3で修正されており、breezeWebサイトまたはNugetから入手できます。これで問題が解決するかどうかをお知らせください。

于 2012-12-06T23:40:18.487 に答える
0

私は同様のエラーを発見しました。バグは私の側にあることが判明しました。接続テーブルを設定しているようです。モデルが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エンティティに属性を設定しています。私がそよ風を理解している限り、エンティティで行われるすべてのドキュメントは、それをマネージャー/現金に追加した後に行う必要があります。キャッシュに追加する前にエンティティを使用しても安全ですか?

于 2012-12-04T09:33:55.427 に答える