NHibernate - 为什么NHibernate不会在一对多中插入子实体?

时间:2010-10-10 18:14:50

标签: nhibernate orm fluent-nhibernate

在我的示例中,我有服务器,这些服务器属于ServerGroup。我正在使用Servers填充ServerGroup并保存ServerGroup。将填充ServerGroup表,但不填充服务器。

public ServerGroupMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        HasMany(x => x.ServersInGroup)
            .Inverse();
    }
 public ServerMap()
    {
        Id(x => x.Id);
        Map(x => x.Description);
        Map(x => x.Address);
        Map(x => x.Password);
        Map(x => x.Ports);          
        HasMany(x => x.Connections)
           .Inverse();
        References(x => x.ServerGroup)
            .Not.Nullable();

    }

当我将持久化和ServerGroup实例保存到数据库时,我希望NHibernate也能正确地将ServerGroup中包含的Server插入到Server表中。

NHibernate正在创建我的数据库架构。以下是Server和ServerGroup对象:

 public class ServerGroup
{
    public virtual int Id { get; private set; }

    public virtual string Name { get; set; }

    public virtual IList<Server> ServersInGroup { get; set; }


    public ServerGroup()
    {
        ServersInGroup = new List<Server>();
    }

    public virtual void AddServer(Server server)
    {
        server.ServerGroup = this;
        ServersInGroup.Add(server);
    }
}


public class Server
{
    public virtual int Id { get; private set; }

    public virtual string Description { get; set; }

    public virtual string Address { get; set; }

    public virtual string Ports { get; set; }

    public virtual string Password { get; set; }       

    public virtual ServerGroup ServerGroup { get; set; }

    public virtual IList<Connection> Connections { get; set; }


    public Server()
    {
        Connections = new List<Connection>();
    }

    public virtual void AddConnection(Connection connection)
    {
        connection.CurrentServer = this;
        Connections.Add(connection);
    }


}

插入ServerGroup时,'ServersInGroup'中的服务器如何不会持久保存到数据库?谢谢!

1 个答案:

答案 0 :(得分:1)

如果弄清楚的话,我知道了。我需要在ServerGroup上指定它应该是Cascade。

 public ServerGroupMap()
        {
            Id(x => x.Id);
            Map(x => x.Name);
            HasMany(x => x.ServersInGroup)
                .Cascade.All()
                .Inverse();
        }