gpt4 book ai didi

nhibernate - 自动映射约定可以与映射覆盖一起使用吗?

转载 作者:行者123 更新时间:2023-12-02 02:24:48 25 4
gpt4 key购买 nike

我的 ID 有一个约定,它会自动映射名称为 Id 的属性作为标识符。随着需求的充实,我需要调整域模型,所以很自然地我上网发现我需要创建一个继承自 IAutoMappingOverride<T> 的类。 .

我的约定:

public class PrimaryKeyConvention : IIdConvention, IIdConventionAcceptance
{
public void Apply(IIdentityInstance instance)
{
instance.Column("Id");
instance.GeneratedBy.SeqHiLo(instance.Name, "10");
}

public void Accept(IAcceptanceCriteria<IIdentityInspector> criteria)
{
criteria.Expect(x => x.Generator, Is.Not.Set);
}
}

我的覆盖:

public class LocateMappingOverride : IAutoMappingOverride<Locate>
{
public void Override(AutoMapping<Locate> mapping)
{
mapping.Map(x => x.SendTo).Not.Nullable();
}
}

如果我删除覆盖,约定确实会按预期工作。

我得到的异常(exception)是The entity 'LocateMappingOverride' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id). .

是否可以将约定与映射覆盖结合使用?

最佳答案

答案是 - 是的,自动映射可以使用覆盖。

看看错误是怎么说的。问题不在于 Locate实体,但带有 LocateMappingOverride实体,当然,那个类不应该被视为实体。你必须有 IAutomappingConfiguration配置以便 FluentNHibernate 的规则将什么视为实体包括 LocateMappingOverride , 也。事实上,它没有映射 Id。

你应该:

  • 更改您的 IAutomappingConfiguration这样实现 IAutoMappingOverride<> 的类被排除在外
  • 将覆盖移动到搜索实体的范围之外
  • 或者引入一个所有实体都需要实现的通用标记接口(interface),即IEntity并更改 IAutomappingConfiguration分别规则。

关于nhibernate - 自动映射约定可以与映射覆盖一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413767/

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