【问题标题】:ServiceStack OrmLite - database first & multiple primary keysServiceStack OrmLite - 数据库优先和多个主键
【发布时间】:2015-12-31 07:38:04
【问题描述】:

我必须处理现有的 Db 并且想使用 ServiceStack 的 OrmLite。

因此,我使用 OrmLite T4 模板创建了 Poco 类。

问题:我想保存到具有多个主键的表中。

 public partial class DbUserGroup
{
    [Required]
    public int Userid { get; set;} // this is a primary key
    [Required]
    public int Groupid { get; set;} // this is a primary key

    public int Ranking { get; set;}
    public bool Isprimary { get; set;}
}

当前使用 Db.Save(userGroup) 不起作用。有没有办法使用 ServiceStack 的 OrmLite 来解决这个问题。

【问题讨论】:

    标签: servicestack ormlite-servicestack


    【解决方案1】:

    多个主键不存在。多列主键是的。 请查看此链接https://github.com/ServiceStack/ServiceStack.OrmLite#limitations

    正如它所说的

    支持具有多个主键的表的潜在解决方法是创建一个自动生成的 Id 属性,该属性根据所有主键字段返回唯一值

    【讨论】:

    • 但是,鉴于它是数据库优先方法(我无法控制数据库结构),建议的解决方法“创建一个自动生成的 Id 属性,该属性根据所有主键返回唯一值字段”是不合适的。这导致 OrmLite 期望 Db 中的 Id 属性?
    • 这不是强制性的。您可以使用 Id 属性(仅限获取)并向其添加 [Ignore] 属性以避免映射错误。
    【解决方案2】:

    我通过将 [PrimaryKey] 添加到这两个属性来解决它。

    public partial class DbUserGroup
    {
        [Required]
        [PrimaryKey]
        public int Userid { get; set;} // this is a primary key
    
        [Required]
        [PrimaryKey]
         public int Groupid { get; set;} // this is a primary key
    
        public int Ranking { get; set;}
        public bool Isprimary { get; set;}
    }
    

    【讨论】:

    • 很遗憾,如果需要两个以上的主键,则会失败
    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多