C# Fluent nHibernate按Id引用(不按对象)

C# Fluent nHibernate按Id引用(不按对象),c#,nhibernate,fluent-nhibernate,database-migration,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Database Migration,Fluent Nhibernate Mapping,我有一个类用户,它位于系统的核心模块中: public class User { public virtual int Id {get; set;} public virtual string Name {get; set; } } 我还有一个类别公司,它位于系统的另一个模块中,没有对核心模块的引用: public class Company { public virtual int Id {get; set;} public virtual string Na

我有一个类用户,它位于系统的核心模块中:

public class User
{
    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 int OwnerUserId {get; set;}
}

如何创建Company.OwnerUserId的映射,使其成为数据库中User.Id的外键?再次,请注意:此映射不能引用用户类。

这是一个解决方法,我不确定架构更新如何在没有映射引用的情况下生成外键以获取元数据

您可以创建映射到同一表的新实体:

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

为什么不使用Mapx=>x.OwnerUserId?这不会生成外键,对吗?是否使用nhibernate进行数据库迁移?在应用程序中-否。在测试中,我使用nhibernate生成整个数据库。当然,我可以将其添加到应用程序或测试的迁移脚本中。但是我想知道是否有本机支持?没有。每个模块只看到它的映射。但是,用户永远不会被删除,只会标记为已删除,因此外键引用是可接受的解决方案。添加映射到同一表的新实体对我来说是一个完美的解决方案。是否有可能将属性OwnerUserId类型设置为int而不是string?只是想在模型中指出,这是边界,我可以在该模块中使LocalUser类过时,因为尽管有映射,它应该在任何地方使用。我不明白,在哪个类中创建附加属性?不是附加属性。我希望实体公司为:public class Company{…public virtual int OwnerUserId{get;set;}},我不介意在项目中使用LocalUser,但不要将其作为公司的属性。请加入聊天: