1

私はこのクラスを持っています:

public partial class VehicleSize { public VehicleSize() { }

    public System.Guid VehicleSizeId { get; set; }
    public int Title { get; set; }
    public int SizeOrder { get; set; }
    public System.DateTime DateCreated { get; set; }
    public Nullable<System.DateTime> DateDeleted { get; set; }

}

私は BreezeJS を使用しています。

Nullable の扱いは少し奇妙に思えます。このフィールドはオプションです。しかし、javascript から DateDeleted = null を明示的に設定するまで文句を言います。フィールドを null に設定しないと、「TypeError の保存中に問題が発生しました: entity.dateDeleted が null です」というメッセージが表示されます。

javascriptで.dateDeletedプロパティを調べると、javascript Dateオブジェクトですが、getTimeはNANです。この場合は null ではなく、フィールドが null であるため、BreezeJS バリデータは検証をスキップします。

サーバーからのメタデータは、フィールドを次のように定義します。

"name": "DateDeleted", "type": "Edm.DateTime", "nullable": "true"

オプションの DateTime フィールドを作成する方法を知っている人はいますか?


私の元の投稿にさらに。この問題は、あるエンティティ マネージャから別のエンティティ マネージャにエンティティをエクスポートすることに関連しているようです。次のコードで示されているように、「null」として始まる日付フィールドは、再度インポートされた後に「無効な日付」になります。

        var vehicleSizeId = 'E9DA5803-BB65-4751-AA22-17B54A1EE7C1';
        alert('getting vehicle from db');

        var query = breeze.EntityQuery
            .from("VehicleSizes")
            .where("vehicleSizeId", "==", vehicleSizeId);

        var em = new breeze.EntityManager("api/Todo");
        em.enableSaveQueuing(true);

        var sandBoxEm = em.createEmptyCopy();
        sandBoxEm.enableSaveQueuing(true);

        em.executeQuery(query)
           .then(function (data) {
               alert('Found the vehicle size in the original entity manager')
               var entity = data.results[0];
               alert('Org Date Deleted == ' + entity.dateDeleted); // Its null at this point


               var bundle = em.exportEntities();
               sandBoxEm.importEntities(bundle, { mergeStrategy: breeze.MergeStrategy.OverwriteChanges });


           });


        sandBoxEm.executeQuery(query)
            .then(function (data) {
                alert('Found the vehicle size')
                var entity = data.results[0];
                alert('Date Deleted == ' + entity.dateDeleted); // Now its invalid date
                entity.sizeOrder = entity.sizeOrder + 1;
                entity.titleTranslation.text = entity.titleTranslation.text + "_x";
                //entity.titleTranslation.dateDeleted = null;
                //entity.dateDeleted = null;
                try {
                    sandBoxEm.saveChanges().then(
                        function () {
                            alert('It saved ok');
                        }).fail(
                            function (error) {
                                var firstItem = error.entitiesWithErrors[0];
                                var firstError = firstItem.entityAspect.getValidationErrors()[0];
                                var msg = "prop: " + firstError.property.parentType.name + " = " + firstError.errorMessage;
                                alert(msg);
                            }
                        );
                }
                catch (ex) {
                    alert( "Problem saving " + ex );
                }
            }

            ).fail(

            function () {
                alert('Getting the vehicle size failed');
            });
4

1 に答える 1

1

Edit: May 8, 2013 - The issue with importing a previously exported null date is now fixed in v 1.3.3 and available on the Breeze website.


Not sure what you are experiencing. I just wrote a unit test to try and confirm what you are seeing and are not able to repro your issue. I am running this against an Employee model where the "birthDate" also defined as a Nullable.

All tests pass on this:

 var em = newEm();  // creates a new EntityManager
 var emp = em.createEntity("Employee", { firstName: "Joe", lastName: "Smith" });
 ok(emp.entityAspect.entityState === breeze.EntityState.Added, "entityState should be 'Added'");
 var birthDate = emp.getProperty("birthDate");
 ok(birthDate === null, "birthDate should be null");
 var q = EntityQuery.from("Employees").where("birthDate", "==", null);

 stop();
 em.executeQuery(q).then(function(data) {
    var empsWithNullBirthDates = data.results;
    ok(empsWithNullBirthDates.length > 0, "should be at least 1 employee with a null birthdate");
    empsWithNullBirthDates.forEach(function(emp) {
       var birthDate = emp.getProperty("birthDate");
       ok(birthDate === null, "queried birthDate should be null");
    });
 }).fail(testFns.handleFail).fin(start);
于 2013-04-26T17:53:57.057 に答える