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必须知道TenantId是Tenant的主要关键。当我向帐户添加新记录时,如下所示,nhibernate或db必须验证租户表中是否存在TenantId值。
Session.Save(新帐户(新TenantId(“guid-of-exists-tenant”),新AccountId(“guid”))
答案 0 :(得分:0)
以下是修复:
将租户模型保留在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();
}
}