Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 在不创建表的情况下映射id为的类和集合_Nhibernate - Fatal编程技术网

Nhibernate 在不创建表的情况下映射id为的类和集合

Nhibernate 在不创建表的情况下映射id为的类和集合,nhibernate,Nhibernate,我想在NHibernate中映射这样的类,但不为父类创建表 public class CarService { public Guid CarId { get; set; } public ICollection<Service> Services { get; protected set; } public void Add(Service service) { if (this.Services.Any(s => s.Ty

我想在NHibernate中映射这样的类,但不为父类创建表

public class CarService
{
    public Guid CarId { get; set; }

    public ICollection<Service> Services { get; protected set; }

    public void Add(Service service)
    {
        if (this.Services.Any(s => s.Type == service.Type))
        {
            throw new Exception("service type already added");
        }

        this.Services.Add(service);
    }
}

public class Service
{
    public Guid ServiceId { get; set; }

    public ServiceType Type { get; set; }

    public string Prop2 { get; set; }

    ...
}
有可能在NHibernate中进行这种映射吗

编辑:
我已经更新了我的对象模型。拥有父类的主要原因是它有一些东西可以保护我的模型的集成(来自DDD的聚合根)。在我的模型中,我有CarService类,它将存储为汽车购买的所有服务。我想在我的模型中创建一些验证,以防止两次添加相同的服务类型

我认为这是不可能的。您始终可以在内存中构造父对象,但NHibernate不会为您这样做。

这是可能的,但老实说,会有任何好处吗?如果你再多解释一下,你想达到的目标我可以给你展示一些技巧。但我不想仅仅因为可能就展示一些东西,我想了解背后的目的是什么。。。因为也许我们能找到更好的解决办法。。。只要你愿意;)你好@RadimKöhler-如果我得到你的要求,我已经提供了更多关于我案件的细节。。。你一定要遵守。这些是拦截器和事件,您可以将其挂接。它们真的很棒,因为基于ParentId,您可以在运行时创建父级。例如,OnLoad事件。。。但老实说,我也会选择父表。即使是对模型的“模仿”(对ParentID的约束是一个很好的理由),那么您仍然可以使用强大的实现来拥有父对象,但您将从NHibernate对它们的激励中获益。。。这有用吗?谢谢@RadimKöhler-你的回答对我帮助很大。我对只有一列的表没有任何问题,但DBA、分析师和其他只使用DB的人都有这个问题但事实上,如果他们是聪明的DB成员,他们应该喜欢ParentId中的foreing键和contstraint值。所以,请不要放弃。。。试着重新开始战斗。。。也许你赢了;)无论如何,有了拦截器你就可以做到。。。当然可以;)享受NHibernate;)
| CHILD    |
|----------|
| ChildId  |
| ParentId | 
| Prop1    |
| Prop2    |
| ...      |
|----------|