使用ServiceStack V3.9的简单SELECT FOREIGN KEY

时间:2014-06-12 10:23:32

标签: c# sql servicestack ormlite-servicestack

我试图进行简单的选择以插入外键。我尝试了几件事:

        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吗?

1 个答案:

答案 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);