0
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();
    }
}

I need map AccountMap.TenantId as Foreign Key (Tenant). Db must know TenantId is primary key of Tenant. When I add new record to Account like below, nhibernate or db must validate TenantId value exists on Tenants table.

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

oguzh4n
  • 682
  • 1
  • 10
  • 29

1 Answers1

0

Here is the fix:

Hold the tenant model inside the Account class instead of the tenant 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;}
}

Update the map as follows

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