我试图进行简单的选择以插入外键。我尝试了几件事:
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");
我必须将DeiviceInfo表设为一个deviceHistory,我必须将DeviceId放在DeviceHistory中的字段ByDeviceId上。
这是类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。我为每个课程创建了不同的文件,我不确定这是我的实施是不是我的要求......也许是他们两个。
你能给我一个简单的SELECT示例,请使用服务堆栈的版本3.9吗?
答案 0 :(得分:2)
获取新Id的最简单方法是让insert使用selectIdentity返回它。你可以这样做:
var newId = Db.Insert(DeviceInfo, selectIdentity: true);
newId将包含生成的AutoIncremented Id。
引起我注意的另一件事是你的Poco上的主键没有被命名为#34; Id&#34;。我不确定它是否按常规要求,但我认为它允许使用一些ormlite扩展。您仍然可以使用[Alias("DeviceId")]
属性对其进行装饰,将其作为DeviceId存储在数据库中。
要通过主键获取单个实体,您可以执行以下操作:
Db.SingleById<DeviceInfo>(id);