值被分配为数据库的null而不是0

时间:2013-12-10 19:07:46

标签: c# asp.net sql-server

我正在尝试开发的代码上的奇怪行为。 我不明白它是否与DB / code / permissions ..或其他。

发生的事情是,在填写表单后,一些应该为0的特定值将作为null传递给数据库。如果我直接在数据库上看到它们,则将它们设置为null。其中一个字段是“int”,另一个是“boolean”。 对于这段代码,我正在使用C#和ASP.net以及实体框架。该数据库是Microsoft SQL。

尝试在此处查找问题可能有用吗? 我能错过什么?

到目前为止,我已经尝试了以下内容:

  • 将数据库上的设置从接受空值更改为不接受空值。有了这个,当我尝试保存这种类型的对象时,该对象不会被保存,因为有些字段被传递为null。如果我在对数据库执行操作之前使用调试器进行确认,则它们将填充为0而不是null。
  • 尝试更改用户的身份验证方式。没有变化。
  • 使用之前的设置重建数据库。没有变化。
  • 使用所有数据库连接重建解决方案。没有变化。
  • 确认存储和更新数据库的方法/过程,它们似乎是正确的。

此外,它们适用于此对象中的其他字段。

我在stackoverflow和网络上搜索了一些解决方案,但到目前为止,没有任何工作。

我还能检查什么来理解值到达数据库的原因为空?

代码:

string path = Server.MapPath("~/prod/ficheiros/") + uplFicheiro.FileName;
uplFicheiro.SaveAs(path);
videos v = new videos();
v.id = 21;
v.video_name = VideoName.Text;
v.desc = DescVideo.Text;
v.aprov = true; <--- reaches DB as null
v.username = Page.User.Identity.Name;
v.url = "45";
v.num_visualizacoes = 0; <--- reaches DB as null

AcessoDados.DBVideos.insertVideo(v);
GridView1.DataBind();
CleanForm();

insertVideo:

[DataObjectMethod(DataObjectMethodType.Insert, true)]
public static bool insertVideo(videos vid)
{
    bool res = false;
    try
    {

        contexto.Entry(vid).State = System.Data.Entity.EntityState.Added;
        res = (contexto.SaveChanges() != 0);

    }
    catch (Exception) { }

    return res;
}

我发现了问题。在数据库上写入的方法不包括我看到的字段为null。因此,他们到达DB的原因是null。 我需要更正由实体模型生成的这部分。有没有办法让模型得到纠正而不是我手动编写方法?

1 个答案:

答案 0 :(得分:0)

- 你需要去colu的房产 - 检查一般块 - &gt;默认值和绑定 - 确保将其设置为0(零) - 如果它是空白,它将采用defaulf NULL