我的一个sql server表中有一个timestamp列用于维护行版本控制, 但我不知道如何在剑道网格上显示其价值, 这是必需的,因为我的实体不会更新该列中具有空值的记录,通过在网格上显示时间戳值,我会在更新记录时将其取回。 这是我的kendo网格架构
schema: {
errors: function(response) {
if (response.Voucher && response.Voucher !== "True") {
return response.Voucher;
}
return false;
},
data: "data",
total: "total",
model: {
id: "ID",
fields: {
ID: { editable: false, nullable: true },
FK_Category_ID: { defaultValue: -1, validation: { required: { message: "" } } },
CompanynameAr: { type: "string", validation: { required: { message: " " } } },
CompanynameEn: { type: "string" },
FK_Country_ID: { defaultValue: -1, validation: { required: { message: "" } } },
Address: { type: "string", validation: { required: { message: "" } } },
PoBox: { type: "string" },
Contractno: { type: "number", validation: { required: { message: "" },min:0 } },
Refrence: { type: "number",validation:{min:0}},
RemarksMarketing: { type: "string" },
Active: { type: "string" },
Latitude: { type: "string" },
Longitude: { type: "string" },
RowVersion: {
type: "date", parse: function (value) {
return new Date(value * 1000);
}
}
//Address
}
}
}
这里RowVersion是我的列,它保存时间戳值,解析函数只是命中并尝试解决特定问题但不会成功。所以需要帮助
答案 0 :(得分:1)
在服务器端,添加或更新记录时,不应在查询中包含时间戳(RowVersion)列(即使值为NULL
)。 SQL Server将在每次更改任何记录时自动为RowVersion列生成值。因此,如果您使用的是纯SQL,请从SQL中删除RowVersion;或者,如果您使用Entity Framework Code-First,则可以使用[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
属性通知Entity Framework它不应更新相关列。
无论如何,如果要向用户显示时间戳(rowversion)值,它是一个8字节的自动递增整数,通常映射到byte[]
类型,您可以使用{{1}将其转换为BitConverter.ToInt64()
并将其显示给用户。但是您永远不需要在控制器中接收添加/更新请求,因为您不应该在查询中包含它。
答案 1 :(得分:0)
正如您在MSDN上看到的那样,sql server Timestamp值是.net字节数组,因此您无法将其转换为Date值。
您只需对收到的值不进行转换即可隐藏它。