如何使用Entity Framework在XAF中实现真正的Master-Detail?

时间:2015-09-07 11:17:58

标签: c# entity-framework xaf

我使用Entity Framework在XAF中有一个主要细节场景。我已使用Master.Details注释[Aggregated]属性。

我期待两种功能:

  • 如果删除主文件,则删除详细信息对象。
  • 如果将某些详细信息添加到母版,则应在母版保存时保存。

但不幸的是,它不是那样的。每次我点击详细网格上的新按钮时,它都会创建详细信息并将其保存到数据库中。

此外,我发现这个老问题(2年前)说EF存在这个问题。 https://www.devexpress.com/Support/Center/Question/Details/Q557784

是否有任何解决方法可以使用EF获得真正的构图和主要细节?

2 个答案:

答案 0 :(得分:0)

在XAF中,记录不会从数据库中物理删除。相反,它们使用GCRecord列标记为已删除。当此字段非空时,该行将被视为已删除,并且永远不会在您的应用中显示。

此外,只要您实例化一个对象,它就会被保存到数据库中,如果您在调用CommitChanges之前将其删除,则会使用非空GCRecord。

答案 1 :(得分:0)

我发现EF

不需要[Aggregated]属性

诀窍是在DBContext OnModelCreating

中设置关系

使用销售订单作为示例

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Entity<Order>().HasMany(x => x.Lines).WithOptional(x => x.Order).WillCascadeOnDelete();
    }

//我希望我能在这里使用WithRequired,但XAF不支持它。

确保LinkNewObjectToParentImmediately为true。

 public partial class T474565WindowsFormsApplication : WinApplication {
    public T474565WindowsFormsApplication() {
        InitializeComponent();
      //  LinkNewObjectToParentImmediately = false;
    }

https://www.devexpress.com/Support/Center/Question/Details/T474565