在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版本的服务堆栈请?

在ServiceStack V3.9中简单地选择外键

获取新Id的最简单方法是让insert使用selectiidentity返回它。你可以这样做:

var newId = Db.Insert(DeviceInfo, selectIdentity: true);

newId将包含生成的自动递增Id。

另一件吸引我的事情是Poco的主键不命名为"Id"。我不确定它是否传统上是必需的,但我认为它将允许使用一些ormlite扩展。您仍然可以使用[Alias("DeviceId")]属性将其作为DeviceId存储在DB中。

通过主键获取单个实体,您可以这样做:

Db.SingleById<DeviceInfo>(id);