当前位置:  开发笔记 > 编程语言 > 正文

如何在流畅的nhibernate中覆盖约定的级联规则

如何解决《如何在流畅的nhibernate中覆盖约定的级联规则》经验,为你挑选了0个好方法。

我有两节课

public class Document 
{ 
    public virtual int Id { get; set; } 
    public virtual IList Files { get; set; } 
} 
public class File 
{ 
    public virtual int Id { get; protected set; } 
    public virtual Document Document { get; set; } 
} 

具有以下约定:

public class HasManyConvention : IHasManyConvention 
{ 
    public bool Accept(IOneToManyPart target) 
    { 
        return true; 
    } 
    public void Apply(IOneToManyPart target) 
    { 
        target.Cascade.All(); 
    } 
} 

和这些映射覆盖

public class DocumentMappingOverride : IAutoMappingOverride 
{ 
    public void Override(AutoMap mapping) 
    { 
        mapping.HasMany(x => x.Files) 
            .Inverse() 
            // this line has no effect
            .Cascade.AllDeleteOrphan(); 
    } 
} 

public class FileMappingOverride : IAutoMappingOverride 
{ 
    public void Override(AutoMap mapping) 
    { 
        mapping.References(x => x.Document).Not.Nullable(); 
    } 
} 

我知道我需要为Document创建一个IClassConvention来改变级联行为,但是我不能让它工作!如果我这样做:

public class DocumentConvention : IClassConvention 
{ 
    public bool Accept(IClassMap target) 
    { 
        return target.EntityType == typeof(Document); 
    } 
    public void Apply(IClassMap target) 
    { 
        target.SetAttribute("cascade", "all-delete-orphan"); 
    } 
} 

我得到:"'cascade'属性未被声明."

如果我这样做:

public class DocumentConvention : IClassConvention 
{ 
    public bool Accept(IClassMap target) 
    { 
        return target.EntityType == typeof(Document); 
    } 
    public void Apply(IClassMap target) 
    { 
        target.HasMany(x => x.Files) 
            .Inverse() 
            .Cascade.AllDeleteOrphan(); 
    } 
} 

然后我得到:

"Duplicate collection role mapping Document.Files"

所以我补充说:

mapping.IgnoreProperty(x => x.Files); 

到我的文档映射,但然后文件始终为空.我究竟做错了什么?如何覆盖单个HasMany关系的级联规则?谢谢Andrew

PS对不起,用交叉后这个,但我需要得到这个尽快解决.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有