指定外键列的名称

时间:2013-06-12 13:35:13

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

public class TransactionIdentityModelMapping : ClassMap<TransactionIdentityModel>
{
    public TransactionIdentityModelMapping()
    {
        Table("TransactionIdentities");
        Id(x => x.Id);
        References(x => x.Transaction);
    }
}

public class TransactionModelMapping : ClassMap<TransactionModel>
{
    public TransactionModelMapping()
    {
        Table("Transactions");
        Id(x => x.Id);
        HasMany(x => x.Identities);
    }
}

TransactionIdentityModel.Transaction的类型为TransactionModel。这意味着创建了一个名为"TransactionModel_id"的列。如何更改此列名称?

我试过了:

References(x => x.Transaction).Column("Transaction_id");

References(x => x.Transaction).ForeignKey("Transaction_id");

References(x => x.Transaction).Column("Transaction_id").ForeignKey("Id").Fetch.Join();

这些都会产生2列,我想要的列(“Transaction_id”)和原始列(“TransactionModel_id”)。

我是否还需要对HasMany

执行某些操作

修改模型:

public class TransactionModel
{
    /// <summary>
    /// For NHibernate
    /// </summary>
    protected TransactionModel()
    {
    }

    public static TransactionModel FromId(TransactionIdentityModel tranIdentity)
    {      
        return new TransactionModel
            {
                Identities = new List<TransactionIdentityModel> { tranIdentity }
            };
    }

    public virtual Guid Id { get; protected set; }

    public virtual IList<TransactionIdentityModel> Identities { get; protected set; }
}

public class TransactionIdentityModel
{        
    public virtual Guid Id { get; protected set; }

    public virtual TransactionModel TransactionModel { get; set; }
}

产生2列,这是我使用地图时生成的SQL: References(x => x.Transaction).Column("Transaction_id").ForeignKey("Id").Fetch.Join();

alter table TransactionIdentities 
    add constraint Id 
    foreign key (Transaction_id) 
    references Transactions

alter table TransactionIdentities 
    add constraint FK958B77026F5C4B80 
    foreign key (TransactionModel_id) 
    references Transactions

1 个答案:

答案 0 :(得分:2)

假设Transaction_Id是相关TransactionModel的外键,那么您需要将References语句更改为:

 References(x => x.Transaction).Column("Transaction_id");

这将覆盖该字段的nHibernates默认期望为TransactionModel_id

查看此问题Prevent Nhibernate schemaexport from generating foreign key constraints on has many relationship,我认为您必须将HasMany映射更改为:

 HasMany(x => x.Identities).KeyColumn("Transaction_id")