首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有两个“主键”的表上的NHibernate

具有两个“主键”的表上的NHibernate
EN

Stack Overflow用户
提问于 2011-07-01 15:14:43
回答 1查看 675关注 0票数 1

我正在学习NHibernate,以便在一个相当独特的遗留数据库上进行分层。其他应用程序使用相同的实时数据库,因此我不能进行会影响它们的更改。

我遇到了一个问题,因为一个表示硬件设备的表有两个用作实际主键的列。一个是真正的主键,一个自动生成的行id。另一个是唯一且非空的硬件序列号。

数据库中的许多其他表与此表具有外键关系。但是,它们中的一些使用真正的主键-整型行id -作为外键,而另一些则使用设备的硬件id。

请注意,在实践中,硬件ID和行ID一旦配对,将保持配对。

我是否能够在NHibernate中创建映射来处理此问题,或者我是否需要创建一些视图来为我提供更标准化的模式,并使用INSTEAD OF触发器使其可更新?

正在使用的数据库是MSSQL2000,以防这会产生影响。

EN

回答 1

Stack Overflow用户

发布于 2011-07-01 16:17:01

在你的情况下,我会做以下事情:

代码语言:javascript
复制
public class HardwareDevice{
    public virtual int Id {get; set;}
    public virtual string SerialNumber {get; set;}
    //Other stuff
}

public class DomainThingA {
    public virtual int Id {get; set;}
    public virtual HardwareDevice Device {get; set;}
    //Other stuff
}

public class DomainThingB {
    public virtual int Id {get; set;}
    public virtual HardwareDevice Device {get; set;}
    //Other stuff
}

使用AutoGenerated Id作为主键来映射您的HardwareDevice类。我的示例使用FluentNhibernate作为类映射。

代码语言:javascript
复制
public class HardwareDeviceMap : ClassMap<HardwareDevice> {
    public HardwareDeviceMap(){
        Id(x=>x.Id).GeneratedBy.Native().Column("Id"); //Uses auto number
        Map(x=>x.SerialNumber).Column("SerialNumber");
        //Other mappings
    }
}

现在来绘制其他两个类:

代码语言:javascript
复制
public class DomainThingAMap : ClassMap<DomainThingA> {
    public DomainThingAMap(){
        Id(x=>x.Id).GeneratedBy.Native(); //Uses auto number
        References(x=>x.Device)
          .Column("DeviceId"); //Joins on Id in HardwareDevice Table by default
        //Other mappings
    }
}

public class DomainThingBMap : ClassMap<DomainThingB> {
    public DomainThingBMap(){
        Id(x=>x.Id).GeneratedBy.Native(); //Uses auto number
        References(x=>x.Device)
           .Column("SerialNumber") //Column in DomainThingB Table
           .PropertyRef("SerialNumber"); //Joins using SerialNumber column (hardware device table)
        //Other mappings
    }
}

类映射的Property-Ref特性允许您连接不是这些类型遗留数据库的主键的列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6544781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档