【问题标题】:Single row constraint in Fluent NHibernateFluent NHibernate 中的单行约束
【发布时间】:2014-04-06 01:33:08
【问题描述】:

基本上,我正在尝试弄清楚如何使 Fluent NHibernate 映射将自身限制为仅保存一个用于保存应用程序配置的记录。

这是有问题的地图:

class ConfigurationMap : ClassMap<Configuration>
{
    public ConfigurationMap()
    {
        Id(x => x.Id).Column("configurationId").GeneratedBy.Identity();
        Map(x => x.DefaultLocation);
        Map(x => x.DefaultPrinter);
        Map(x => x.DefaultPrinterLabelAmount);
        Map(x => x.DefaultCompanyName);
        Map(x => x.FolderLocalPath);
        Map(x => x.CompanyNameEnabled);
        Map(x => x.TimestampLabelEnabled);
        Map(x => x.CollectionFeeEnabled);
    }
}

我已经看到了适合我用例的答案:https://stackoverflow.com/a/3967446/273162

基本上,我正在尝试找出 Fluent NHibernate 类似物,以使其像上面链接中的答案一样工作。

免责声明:我之前使用过外部配置文件,并认为将所有内容保存在数据库中会更好/更简单。

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    您可以通过将CheckConstraint("configurationId = 1") 添加到您的ClassMap 来添加检查约束:

    class ConfigurationMap : ClassMap<Configuration>
    {
        public ConfigurationMap()
        {
            Id(x => x.Id).Column("configurationId").GeneratedBy.Identity();
    
            // Other properties
    
            CheckConstraint("configurationId = 1");
        }
    }
    

    这将导致以下 SQL:

    CREATE TABLE Configuration (
        configurationId INT IDENTITY NOT NULL,
        PRIMARY KEY (configurationId)
        CHECK (configurationId = 1)
    )
    

    漂亮类似于https://stackoverflow.com/a/3967446/273162的答案。

    在表中插入一行后,标识列将为 1,约束将失败:)

    【讨论】:

    • 谢谢,这对我有帮助!
    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多