我的模型SecPermission具有Id = int列,即Int32。添加新记录时,为什么返回新添加的ID作为Int64?
服务方法
public object Post(AddPermission request)
{
var perm = request.ConvertTo<SecPermission>();
perm.AuditUserId = UserAuth.Id;
LogInfo(typeof(SecPermission), request, LogAction.Insert);
return Db.Insert(perm);
}
单元测试代码
using (var service = HostContext.ResolveService<SecurityService>(authenticatedRequest))
{
///**this line is returning an object with Int64 in it.
int id = (int) service.Post(new AddPermission { Name = name, Description = "TestDesc" });
service.Put(new UpdatePermission { Id = permission, Name = name,Description = "TestDesc" });
service.Delete(new DeletePermission { Id = Convert.ToInt32(id)});
}
public class SecPermission : IAudit
{
[AutoIncrement]
[PrimaryKey]
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
[StringLength(75)]
public string Description { get; set; }
[Required]
public PermissionType PermissionType { get; set; }
public int AuditUserId { get; set; }
public DateTime AuditDate { get; set; } = DateTime.Now;
}
答案 0 :(得分:1)
永远不要在ServiceStack服务中返回值类型,它必须是引用类型,通常是类型化响应DTO,但也可以是原始数据类型,例如string
或byte[]
,但是它永远不能是像整数这样的值类型,否则将无法在某些ServiceStack功能中使用。
对于该服务,我要么返回SecPermission
对象,要么返回结果值中带有整数的AddPermissionResponse
对象。
请注意,OrmLite Insert()
API返回一个long
,这就是为什么看到很长的原因,但是您需要call Save() or specify selectIdentity:true才能获取新插入的ID。 [AutoIncrement]
主键,例如:
var newId = db.Insert(perm, selectIdentity:true);
或
Db.Save(perm);
var newId = perm.Id; //auto populated with auto incremented primary key
在OrmLite中,您也不需要[PrimaryKey]
和[AutoIncrement]
,因为[AutoIncrement]
自己指定了主键,就像使用Id property convention一样。
如果您要直接致电服务,也可以输入“ Response”以避免强制转换,例如:
public SecPermission Post(AddPermission request)
{
//...
Db.Save(perm);
return perm;
}
然后,您无需在直接调用它时进行投射,例如:
var id = service.Post(new AddPermission { ... }).Id;
使用object
或类似SecPermission
的类型化响应在ServiceStack中没有行为差异,尽管最好使用IReturn<T>
接口标记在请求DTO上指定它,例如:>
public AddPermission : IReturn<SecPermission> { ... }
当从服务客户端调用时启用端到端类型化API,例如:
SecPermission response = client.Post(new AddPermission { ... });