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
答案 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")