DevExpress多对多关联表

时间:2017-05-25 17:51:33

标签: c# .net entity-framework devexpress xaf

我在DevExpress的支持下发布了这个问题,不过我知道在这里我可能会更快地得到答案,这对我来说是一个超级大问题而且我已经拉了两天没有任何成功。希望这里的人可能有这方面的经验。

我的问题与两个Business Objects之间存在M-N关系时默认创建的关联表有关。

  

想法是这样的:

     

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

     

对于UNIT中的每个USER,我需要存储一个STATUS,因此我从SQL创建了一个名为STATUS_IN_UNIT的新属性enter image description here

     

当我想以编程方式访问此属性时出现问题,   这当然是不可能的,因为我没有任何对象   与此表相关联。唯一的办法就是通过查询来访问它   数据库。

     

我想要实现的是在ListView里面显示这个表   UNIT DetailView,这是因为USERS连接到UNIT   必须启用和禁用。我见过这些线程

     

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

     

但是我再次寻找一个更简单的解决方案,   否则创建视图真的很费时间   控制我的自我,以处理它。所以我的问题是   下面:

     

1。如何创建引用该表的类?   2.如何在UNITS DetailView中显示该表并从上表中访问其属性?

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

提前谢谢!!!

1 个答案:

答案 0 :(得分:2)

我假设您已经创建了一个用户类并在其中创建了一个Unit集合,并在Unit类中创建了一个集合用户。在这种情况下,XAF将创建一个名为Users_Units的自动创建的中间表,它包含两个主键,您无法在其中添加任何属性。如果要在中间类中添加属性或属性,则应该显式创建类,所以这里是代码:

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);
        }
    }
}

但是当然使用上面的代码,你不能直接在User和Unit之间相互链接/取消链接。相反,您应该手动添加详细记录,因为它充当普通的主要细节或一对多实体关系。