Fluent nHibernate 通过 Id 引用(而不是通过对象)
Fluent nHibernate reference by Id (not by object)
我有一个class用户,在系统的核心模块中:
public class User
{
public virtual int Id {get; set;}
public virtual string Name {get; set; }
}
我还有一个class公司,它在系统的另一个模块中,没有对核心模块的引用:
public class Company
{
public virtual int Id {get; set;}
public virtual string Name {get; set; }
public virtual int OwnerUserId {get; set;}
}
如何创建 Company.OwnerUserId 的映射,使其成为数据库中 User.Id 的外键?再次注意:此映射不能引用 "User" class.
这是一种解决方法,我不确定架构更新将如何在没有映射引用的情况下生成外键以获取元数据。
您可以创建映射到同一实体的新实体 table:
public class LocalUser
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Company
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual LocalUser OwnerUserId { get; set; }
}
public class LocalUserMap : ClassMap<LocalUser>
{
public LocalUserMap()
{
Table("[User]");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name);
}
}
我有一个class用户,在系统的核心模块中:
public class User
{
public virtual int Id {get; set;}
public virtual string Name {get; set; }
}
我还有一个class公司,它在系统的另一个模块中,没有对核心模块的引用:
public class Company
{
public virtual int Id {get; set;}
public virtual string Name {get; set; }
public virtual int OwnerUserId {get; set;}
}
如何创建 Company.OwnerUserId 的映射,使其成为数据库中 User.Id 的外键?再次注意:此映射不能引用 "User" class.
这是一种解决方法,我不确定架构更新将如何在没有映射引用的情况下生成外键以获取元数据。
您可以创建映射到同一实体的新实体 table:
public class LocalUser
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Company
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual LocalUser OwnerUserId { get; set; }
}
public class LocalUserMap : ClassMap<LocalUser>
{
public LocalUserMap()
{
Table("[User]");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name);
}
}