2017-05-25 132 views
0

我在DevExpress支持上发布了这个问题,但我知道在这里我可能会得到更快的答案,这对我来说是一个超级大问题,我一直拉着我的头发2天没有任何成功。希望这里的人可能有这个框架的经验。DevExpress多对多关联表

我的问题与关联表有关,当两个业务对象之间存在M-N关系时,该关联表默认创建。

想法是这样:

让我们假设我有这些对象 - >单位和用户

一个单位,我需要存储状态中的每个用户,所以我创建了一个新的属性从SQL,称为STATUS_IN_UNIT enter image description here

的问题出现时,我想访问从代码, 这当然是IMPO这个属性因为我没有任何与此表关联的对象 。唯一的方法是通过查询 数据库来访问它。

我想要实现的是将此表显示为 单元DetailView内的ListView,这是强制性的,因为必须启用和禁用连接到UNIT 的用户。我所看到的这些线程

https://www.devexpress.com/Support/Center/Example/Details/E2334 https://www.devexpress.com/Support/Center/Question/Details/T500887

但随后再次我要寻找一个更平凡解到这一点, 否则这将是非常耗时创建视图和 控制器我自己为了处理它。所以我的问题如下:

1.如何创建一个引用这个表的类? 2.如何在单位DetailView中显示此表并从上表访问其属性?

这将不胜感激,如果你会回答这个问题。

谢谢!

+0

因此,如果我正确读取您的数据,您希望在每个单元内显示单位列表和关联用户?对于这种用例,我们几乎总是使用分层数据网格,但这可能对您无效。在事物的业务对象方面,我创建了两个类(针对您的情况,单元和用户),并在父类中为子项添加了一个List 。因此,在您的单元课程中,您将有一个: 列表 usersInUnit。这应该很好地绑定到分层数据网格。 – mjw

回答

1

我假设你已经创建了一个用户类,并在其中创建了Unit的集合,并在Unit类中创建了一个集合用户。在这种情况下,XAF将创建一个名为Users_Units的自动创建的中间表,该表包含这两个主键,并且不能在其中添加任何属性。如果您要添加的中间阶级内部的属性(S)或财产,你应该明确地创建类,所以这里的代码:

public class User : BaseObject 
{ //... your code here 

    [Association("User-UserUnits")] 
    public XPCollection<UserUnit> UserUnits 
    { 
     get 
     { 
      return GetCollection<UserUnit>("UserUnits"); 
     } 
    } 
} 

public class Unit : BaseObject 
{ // ... your code here 

    [Association("Unit-UserUnits")] 
    public XPCollection<UserUnit> UsersUnitss 
    { 
     get 
     { 
      return GetCollection<UserUnit>("UserUnits"); 
     } 
    } 
} 

public class UserUnit : BaseObject 
{ 
    User user; 
    [Association("User-UserUnits")] 
    public User User 
    { 
     get 
     { 
      return user; 
     } 
     set 
     { 
      SetPropertyValue("User", ref user, value); 
     } 
    } 

    Unit unit; 
    [Association("Unit-UserUnits")] 
    public Unit Unit 
    { 
     get 
     { 
      return unit; 
     } 
     set 
     { 
      SetPropertyValue("Unit", ref unit, value); 
     } 
    } 

    int status; 
    public int Status 
    { 
     get 
     { 
      return status; 
     } 
     set 
     { 
      SetPropertyValue("Status", ref status, value); 
     } 
    } 
} 

但当然上面的代码,您无法链接/断开链接对方直接在用户和单位之间。相反,您应该手动添加详细记录,因为它充当普通的主 - 细节或一对多实体关系。

+0

嗨@Achmad Mulyadi非常感谢,实际上我已经设计了我的课程,因为我没有意识到DevExpress中的这个问题,但我设法做了一个解决方法,可能不是最好的解决方案:) – strg