在ServiceStack V3.9中简单地选择外键
本文关键字:选择 简单 ServiceStack V3 | 更新日期: 2023-09-27 18:08:30
我想做一个简单的选择来插入一个外键。我尝试了几种方法:
var Id = Db.Select<DeviceInfo.DeviceInfo>("SELECT DeviceId FROM DeviceInfo WHERE (deviceType = 1 AND humanReadDevId = 001)");
//var Id = Db.Select<DeviceInfo.DeviceInfo>(d => d.Id).Where(d => d.deviceType == 1 && a.humanReadDevId = 001);
//var rows = Db.Select<DeviceInfo.DeviceInfo>(@"DeviceType = {0} AND HumanReadDevId = {1} ", "1", "001");
我必须表deviceinfo和deviceHistory,我必须把DeviceId字段ByDeviceId在deviceHistory
下面是类DeviceInfo:
public class DeviceInfo : IReturn<DeviceInfoResponse>
{
/// <summary>
/// Gets or sets the id of the DeviceInfo. The id will be automatically incremented when added.
/// </summary>
[AutoIncrement]
public int DeviceId { get; set; }
// Data reveived
public int DeviceType { get; set; }
public string HumanReadDevId { get; set; }
public string Hardware { get; set; }
public string Model { get; set; }
}
和DeviceHistory:
public class DeviceHistory : IReturn<DeviceHistoryResponse>
{
/// <summary>
/// Gets or sets the id of the DeviceHistory. The id will be automatically incremented when added.
/// </summary>
[AutoIncrement]
public int DevHistId { get; set; }
// Auto generated with data received "DeviceType" and "HumanReadDevId"
[References(typeof(DeviceInfo.DeviceInfo))]
public int ByDeviceId { get; set; }
// Data reveived
public int DeviceType { get; set; } // To generate Id
public string HumanReadDevId { get; set; } // To generate Id
public string Firmware { get; set; }
public string SWVersion1 { get; set; }
public string SWVersion2 { get; set; }
public string Status { get; set; }
// Auto generated with data received "mail"
public string UserEmail { get; set; }
}
我尝试了很多不同的方法来获得id,但每次我的请求返回null。我为每个类创建不同的文件,我不确定这是我的实现谁是坏的还是我的请求…也许两个都是。
你能给我一个例子,一个简单的选择与3.9版本的服务堆栈请?
获取新Id的最简单方法是让insert使用selectiidentity返回它。你可以这样做:
var newId = Db.Insert(DeviceInfo, selectIdentity: true);
newId将包含生成的自动递增Id。
另一件吸引我的事情是Poco的主键不命名为"Id"。我不确定它是否传统上是必需的,但我认为它将允许使用一些ormlite扩展。您仍然可以使用[Alias("DeviceId")]
属性将其作为DeviceId存储在DB中。
通过主键获取单个实体,您可以这样做:
Db.SingleById<DeviceInfo>(id);