breeze实体创建,外键列默认设置为“0”

时间:2013-12-02 22:44:13

标签: breeze

我在桌子上有一些不可空的FK。 我已经检查了模型和数据库,并且FK被设置为不可为空,并且没有分配默认值。

现在当我创建一个这种类型的微风实体时,FK列已经填充了“ 0

我想在这里发布一些图片,但我的声誉不允许我这样做。

我已经检查了验证器并且它们在那里(需要的类型之一和int32类型之一)但是它们将遗憾地从未启动,因为值已经是“0”

所以我不会在客户端获得验证错误,但是在返回服务器时我会得到它们。

顺便说一句。我正在使用web api实体框架,ms sql2008r2,我已经尝试了breeze.debug.js 1.4.5,1.4.6以及现在github上应该修复getValidationErrors()的那个。

这就是我如何创建实体:

function newDiscount() {

    var dsc = manager.createEntity("tblTransactionImporterDiscounts");
    return dsc;
}
这有点像臭虫。任何启示都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

创建实体时,Breeze始终初始化其所有字段的值。

  1. 如果为字段定义了默认值(EntityType / DataProperty元数据的一部分),则使用此值。
  2. 如果不是,则使用字段数据类型的默认值。
    1. 对于可为空的字段,此值为“null”
    2. 对于不可侵犯的领域
      1. 对于无法使用的数字字段,此默认值为数字0. (这是您的情况)
      2. 对于不可为空的字符串字段,此默认值为空字符串('')。 等。
  3. 所以你有几个选择。使字段可为空或添加自定义验证,规定值0对此字段无效。

    有关此点的详细讨论,请参阅validation documentation,因为它与参考导航属性有关。

答案 1 :(得分:0)

试试这个:

namespace ProvSys.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tblTransactionImporterDiscounts
    {
        public int IDTransactionImporterDiscount { get; set; }
        public int IDImporterDiscount { get; set; }
        public int IDCampaignType { get; set; }
        public string CampaignText { get; set; }
        public Nullable<decimal> Discount { get; set; }
        public int IDTransaction { get; set; }
        public Nullable<System.DateTime> ReceivedOn { get; set; }

        [ForeignKey("IDCampaignType")]
        public tblCampaignTypes tblCampaignTypes { get; set; }
        [ForeignKey("IDImportedDiscount")]
        public tblImporterDiscounts tblImporterDiscounts { get; set; }
        [ForeignKey("IDTransaction")]
        public tblTransactions tblTransactions { get; set; }
    }
}

此外,由于它不可为空,我的假设是你不想保存空值,你应该知道你想要附加到新对象的外键。尝试添加这样的东西来创建函数:

function newDiscount(transaction, campaign, importedDiscount) {
    var dsc = manager.createEntity("tblTransactionImporterDiscounts");
    dsc.IDCampaignType = campaign.id;
    dsc.IDImportedDiscount = importedDiscount.id;
    dsc.IDTransaction = transaction.id;
    return dsc;
}