gpt4 book ai didi

c# - 如何在 NHibernate 上创建通用映射?

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:03 25 4
gpt4 key购买 nike

我在这里遇到了类映射的问题。我有四个表:

  • 修复
  • 要求
  • 控制
  • 留言

Request 有表 FixMessage 的外键,而 Control 有一个外键 请求。基本映射工作正常,但我不想直接使用 Message 类型映射 RequestMessage 之间的外键,因为我们不会使用此类 - 我们通过访问此消息表的各种 View 进行所有插入和选择。要使用的 View 将取决于存储在 Fix 表中的值,例如,Message101Message 的 View (我们不我们不想使用所有字段,还有其他业务特定原因导致我们不想使用表 Message)。

对于指定的场景,基本思想是有一个这样的映射:

public class Request: Entity
{
public virtual short Number { get; set; }
public virtual Fix Fix { get; set; }
public virtual IMessage Message { get; set; }
}

IMessage 是所有Message 类实现的接口(interface)。我尝试在 Request 类中使用泛型,但无济于事。也许使用 MappingOverride 会有帮助?

谢谢

编辑:

为了使用 Any,我将用于查找对象类型的值放在 Request 表中,所以我的覆盖看起来像:

    public override void OverrideMapping(IClassMapper<Request> __m)
{
__m.Any(x => x.Envio, typeof(long), m =>
{
m.IdType<long>();
m.MetaType<short>();
m.MetaValue(101, typeof(Message101));

m.Columns(id =>
{
id.Name("MessageId");
id.NotNullable(true);
}, classRef =>
{
classRef.Name("MessageType");
classRef.NotNullable(true);
});

m.Access(Accessor.Property);
m.Cascade(Cascade.None);

}
);
}

但我一直收到 not-null property references a null or transient value 错误。有什么想法吗?

最佳答案

毕竟,我必须将鉴别器字段的引用放在 Request 上,这使我能够使用 NHibernate 的 Any 映射。在我看来,我在问题编辑中描述的问题与问题本身无关,因此,Daniel Schilling 提出的解决方案。解决了我的问题。关于 Any 映射,可以找到其工作原理的描述 here .

关于c# - 如何在 NHibernate 上创建通用映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389867/

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