【问题标题】:NHibernate and HasMany mappingNHibernate 和 HasMany 映射
【发布时间】:2011-08-07 19:08:33
【问题描述】:

我有两个实体的简单映射:poll 和 polloption

投票:

public class PollMap : ClassMap<Poll>
{
    public PollMap() {
        Id(x => x.Id);

        Map(x => x.Content);

        HasMany(x => x.PollOptions).Cascade.All();
    }
}

投票选项:

public class PollOptionMap : ClassMap<PollOption>
{
    public PollOptionMap() {
        Id(x => x.Id);

        Map(x => x.Content);

        References(x => x.Poll);
    }
}

在测试代码中我试图删除投票实体的第一个投票选项

测试代码:

    [Transaction]
    public ActionResult Add() {

        var poll = new Poll() {
            Content = "poll",
            PollOptions = new List<PollOption>() {
                new PollOption(){
                    Content="PollOption#1"
                },
                new PollOption(){
                    Content="PollOption#2"
                }
            }
        };

        GetSession.Save(poll);

        return Content("Added");
    }

    [Transaction]
    public ActionResult Removed() {

        var poll = GetSession.Query<Poll>().FirstOrDefault();

        poll.PollOptions.RemoveAt(0);

        GetSession.Update(poll);

        return Content("Updated");
    }

当删除操作触发它时,它不会从 db 中删除 polloption,而是在我的外键中设置 null :(

ps。谷歌没有帮助

【问题讨论】:

    标签: asp.net-mvc nhibernate fluent-nhibernate mapping


    【解决方案1】:

    Cascade.All() 仅在删除父对象时才删除子对象。如果您希望孩子在从集合中删除时被删除,您需要Cascade.AllDeleteOrphan()

    附加说明:您还必须将双向关联的一侧标记为Inverse()。更多信息在这里:http://nhibernate.info/doc/nh/en/index.html#collections-bidirectional

    【讨论】:

    • 没有得到:拥有的实体实例不再引用具有 cascade="all-delete-orphan" 的集合
    • 看起来像孩子以某种方式连接到父母而不是只用钥匙
    • @Ilya Kogan,我修改了删除操作以将其覆盖在列表中:goo.gl/VLJWo
    • @msony 你为什么这样做?很明显,抛出此异常是因为您已从实体中删除了对集合的引用。您为什么不像在原始问题中那样删除该条目?
    • @cremor cuz im 使用 AutoMapper (automapper.codeplex.com) 并在代码中执行此操作:goo.gl/hiLfs 避免大量代码,当 automapper 触发时,它会替换列表。所以我问我如何将子实体连接到父实体?
    猜你喜欢
    • 2012-10-19
    • 2012-04-03
    • 2013-09-01
    • 1970-01-01
    • 2015-07-12
    • 2013-04-24
    • 2012-09-05
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多