如何在 Nhibernate 上将不引用对象映射为外键

本文关键字:映射 对象 引用 Nhibernate | 更新日期: 2023-09-27 18:34:54

public class Entity<TId>
{
    public virtual TId {get;set;}
}
public class TenantId
{
    public virtual Guid Id {get;set;}
}
public class Tenant
    : Entity<TenantId>
{
    public string Name {get;set;}
}
public class AccountId
{
    public virtual Guid Id {get;set;}   
}
public class Account
    : Entity<AccountId>
{
    public Account(TenantId tenantId,AccountId accountId)
    {
        TenantId = tenantId;
        Id= accountId;
    }
    public TenantId TenantId {get;set;}
    public string AccountName {get;set;}
}
public class TenantMap
{
    public TenantMap()
    {
        Id(x=>x.Id.Id).GeneratedBy.GuidComb();
        Map(x => x.Name).Not.Nullable();
    }
}
public class AccountMap
{
    public AccountMap()
    {
        Id(x=>x.Id.Id).GeneratedBy.GuidComb();
        Map(x=>x.TenantId.Id).Column("TenantId").Not.Nullable(); 
        Map(x => x.AccountName).Not.Nullable();
    }
}

我需要映射AccountMap.TenantId作为外键(租户(。Db 必须知道租户 ID 是租户的主键。当我像下面这样向帐户添加新记录时,nhibernate或db必须验证租户表上是否存在TenantId值。

Session.Save(new Account(new TenantId("guid-of-exists-tenant"(,new AccountId("guid"((

如何在 Nhibernate 上将不引用对象映射为外键

这是修复:

将租户模型保存在 Account 类中,而不是租户 ID 中。

public class Account
    : Entity<AccountId>
{
    public Account(Tenant tenant,AccountId accountId)
    {
        Tenant = tenant;
        Id= accountId;
    }
    public Tenant Tenant {get;set;}
    public string AccountName {get;set;}
}

按如下方式更新地图

public class AccountMap
{
    public AccountMap()
    {
        Id(x=>x.Id.Id).GeneratedBy.GuidComb();
        References(x => x.Tenant);  // Foreign Key.
        Map(x => x.AccountName).Not.Nullable();
    }
}