私はこのクラスを持っています:
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');
});