我有一张桌子:
[Table("MyTable", Schema = "MySchema")]
public class MyTable
{
[Key, Column(Order = 0)]
[Required(AllowEmptyStrings = false
public string LanguageID { get; set; }
[Key, Column(Order = 1)]
[Required(AllowEmptyStrings = false
public byte YearID { get; set; }
[Key, Column(Order = 2)]
[Required(AllowEmptyStrings = false)]
public byte SIMSCodeID { get; set; }
[Required(AllowEmptyStrings = true)]
public string Data { get; set; }
[Required(AllowEmptyStrings = true)]
public int UserID { get; set; }
[Required(AllowEmptyStrings = true)]
public int brformula { get; set; }
}如您所见,最后两个字段是整数。在尝试用AJAX访问这个表中的一行时,应该对这些注释进行什么,这样我就不会得到这个错误:
消息:
The 'brformula' property on 'MyTable' could not be set to a 'null' value. You must set this property to a non-null value of type 'Int32'. 例外类型:
System.Data.ConstraintException发生错误的代码行:
MyTable myTable= db.MyTableDbSet.Find(langid, year, simscodeid);Api控制器方法:
[HttpGet]
public HttpResponseMessage GetSIMSData(string langid, byte year, byte simscodeid)
{
try
{
MyTable myTable = db.MyTableDbSet.Find(langid, year, simscodeid);
if (MyTable == null)
{
return Request.CreateResponse(HttpStatusCode.OK, this.getSimsDataObject(false, myTable));
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, this.getSimsDataObject(true, myTable));
}
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}我的AJAX调用:
getSIMSDataByAllParams: function (langId, year, simscodeid) {
jq.ajax({
contentType: 'application/json; charset=utf-8',
type: "GET",
url: "/api/MyTable",
data: {
langid: langId,
year: year,
simscodeid: simscodeid,
brformula: 0
},
dataType: "json",
beforeSend: function (jqXHR, settings) {
simsDataView.resetStatusAndErrorTf();
simsDataView.setStatusMsg(simsDataView.getMessageByLang(langId, 'fetchingTreeNodeDataMsg'), constants.TEXT_COLOR_BLUE);
},
success: function (data, textStatus, jqXHR) {
simsDataByAllParams = {};
simsDataByAllParams = JSON.parse(data);
},
complete: function (jqXHR, textStatus) {
if (simsDataByAllParams.hasData) {
tinymce.activeEditor.setContent(simsDataByAllParams.simsDataObject.Data);
} else {
tinymce.activeEditor.setContent(simsDataView.getMessageByLang(langId, 'addEditorContentMsg'));
}
dbDirty = false;
simsDataView.setStatusMsg(simsDataView.getMessageByLang(langId, 'treeNodeDataFetchedMsg'), constants.TEXT_COLOR_GREEN);
},
error: function (jqXHR, textStatus, errorThrown) {
errorsMsgTxt.append(simsUtility.printAjaxError(langId, jqXHR, textStatus, errorThrown));
}
});
},注意:目前,DB中的字段允许空,但我希望它是默认值0。为什么它不抱怨UserID呢?它也是整数,允许为空。
发布于 2017-08-10 12:58:44
根据我的经验,我可以用1种或2种方法。
在数据库中设置默认值,或在构造函数中设置默认值。
数据库中的:
如果您正在使用SQL Server (这就是我所使用的,但我无法理解为什么在其他DBMS中不能使用此功能),您可以单击表设计中的列。对于brformula及其更低的版本,有一个名为“默认值或绑定”的行,您可以将其设置为0。
构造函数中的:
public class MyTable
{
[Key, Column(Order = 0)]
[Required(AllowEmptyStrings = false
public string LanguageID { get; set; }
[Key, Column(Order = 1)]
[Required(AllowEmptyStrings = false
public byte YearID { get; set; }
[Key, Column(Order = 2)]
[Required(AllowEmptyStrings = false)]
public byte SIMSCodeID { get; set; }
[Required(AllowEmptyStrings = true)]
public string Data { get; set; }
[Required(AllowEmptyStrings = true)]
public int UserID { get; set; }
[Required(AllowEmptyStrings = true)]
public int brformula { get; set; }
public MyTable()
{
brformula = 0;
}
}我希望这能帮到你。
https://stackoverflow.com/questions/45613675
复制相似问题