gpt4 book ai didi

nhibernate - 使用 fluent-nhibernate automapping 在外键上添加多列唯一约束

转载 作者:行者123 更新时间:2023-12-02 02:35:21 27 4
gpt4 key购买 nike

我是 NHibernate 和流利的 nhibernate 新手。我在唯一约束和 nhibernate 映射方面遇到了一些问题。

我有领域模型的以下部分。

public class Batch
{
public virtual int Id {get; set;}
public virtual string Name {get; set;}
public virtual IList<BatchParameter> BatchParameters {get; set;}
}
public class BatchParameter
{
public virtual int Id {get; set;}
public virtual string Name {get; set;}
public virtual Batch Batch {get; set;}
}

我正在尝试使用 fluent-nhibernate 通过自动映射将其映射到数据库 (SQLServer) 上。我想设置我的数据库以便拥有:

  • “Id”属性的主键

  • BatchParamets 表上的外键

  • Batch 表上列名称的唯一约束

  • BatchParameters 表中 Name 和 Batch_Id 列的唯一约束

所以我写下了这段代码:

public class BatchMapping : IAutoMappingOverride<Batch>
{
public void Override(FluentNHibernate.Automapping.AutoMapping<Batch> mapping)
{
mapping.Id( b => b.Id);
mapping.HasMany<BatchParameter>(p => p.BatchParameters).Cascade.All().Inverse();
}
}

public class BatchParameterMapping : IAutoMappingOverride<BatchParameter>
{
public void Override(FluentNHibernate.Automapping.AutoMapping<BatchParameter> mapping)
{
mapping.Id( b => b.Id);
mapping.Map(b => b.Name).Unique();
//mapping.Map(p => p.Name).UniqueKey("Batch_Parameter");
//mapping.Map(p => p.Batch.Id).UniqueKey("Batch_Parameter");
}
}

主键、外键和第一个唯一约束没有问题。 Unique Constraint有点头疼。

谁能告诉我正确的方法???

谢谢!

最佳答案

首先,您似乎遇到了复制粘贴错误:...Map(b => b.Name)... 应该进入 BatchMapping,不是 BatchParameterMapping

public class BatchMapping : IAutoMappingOverride<Batch>
{
public void Override(AutoMapping<Batch> mapping)
{
mapping.Map(b => b.Name).Unique();
}
}

接下来,BatchParameter.BatchBatchParameterBatch的多对一关系,所以应该和References(...) 而不是 Map(...)。您将 References 用于另一个实体的外键,并将 Map 用于简单属性。

public class BatchParameterMapping : IAutoMappingOverride<BatchParameter>
{
public void Override(AutoMapping<BatchParameter> mapping)
{
mapping.Map(p => p.Name).UniqueKey("Batch_Parameter");
mapping.References(p => p.Batch).UniqueKey("Batch_Parameter");
}
}

最后,您应该删除不必要的 Id 属性和 Batch.BatchParameters 映射。默认情况下,Fluent NHibernate 的自动映射将根据需要映射它们。在您的 Override 方法中,您只需指定要执行不同于自动映射默认设置的操作的属性,例如指定唯一键。

关于nhibernate - 使用 fluent-nhibernate automapping 在外键上添加多列唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2055588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com