Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在DevExpress XPO类中创建一对一关系?_C#_.net_Devexpress_Gridcontrol_Xpo - Fatal编程技术网

C# 如何在DevExpress XPO类中创建一对一关系?

C# 如何在DevExpress XPO类中创建一对一关系?,c#,.net,devexpress,gridcontrol,xpo,C#,.net,Devexpress,Gridcontrol,Xpo,很快 这是一个模式 用户表 类别表 用户有一个categoryID 我需要用用户ID、CategoryID、CategoryName来填充GridControl 注意CategoryName只属于第二个表(Category表) 我所做的是: 创建模型(用户、类别)注意,主键是复合键,所以它必须是结构化的 GridView代码 IDataLayer dal = XpoDefault.GetDataLayer(MSSqlConnectionProvider.GetConnectionSt

很快

这是一个模式

用户表

类别表

  • 用户有一个categoryID
  • 我需要用用户ID、CategoryID、CategoryName来填充GridControl
  • 注意CategoryName只属于第二个表(Category表)
  • 我所做的是:

    创建模型(用户、类别)注意,主键是复合键,所以它必须是结构化的

    GridView代码

     IDataLayer dal = 
     XpoDefault.GetDataLayer(MSSqlConnectionProvider.GetConnectionString(" 
     (local)", "testdb"), AutoCreateOption.DatabaseAndSchema);
     Session session = new Session(dal);
     XPCollection collection = new XPCollection(session, typeof(User));
     gridControl1.DataSource = collection;
    
    结果:=失败


    我该怎么办?在一对一关系中,表的任何帮助都应该具有相同的键。

    User
    类中,删除属性
    CategoryId
    并按如下方式更改
    Category
    属性:

    [Persistent("CategoryID")]
    public Category Category
    {
        get; set;
    }
    
    并更改您的CategoryName属性:

    [PersistentAlias("Category.CategoryName")]
    public string CategoryName 
    { 
        get
        {
            return (string)EvaluateAlias(nameof(CategoryName));
        }
    }  
    
    Category
    返回到
    User
    的引用更复杂,因为没有持久字段来支持它。您可以尝试免费加入:

    [PersistentAlias("[<User>][Category = '@This.CategoryID'].Single()")]
    public User User 
    { 
        get
        {
            return (User)EvaluateAlias(nameof(User));
        }
    }  
    
    [PersistentAlias([][Category='@This.CategoryID'].Single()”)
    公共用户
    { 
    得到
    {
    返回(用户)EvaluateAlias(用户名称));
    }
    }  
    
    PS呢:除非您需要XPO映射到现有的DB结构,否则我建议使用XPObject作为基类。它提供了更大的灵活性,但需要更改架构,例如ObjectType列。@deveton您是否可以检查我的答案是否适合您,如果满意,请进行upvote?谢谢
    [PersistentAlias("[<User>][Category = '@This.CategoryID'].Single()")]
    public User User 
    { 
        get
        {
            return (User)EvaluateAlias(nameof(User));
        }
    }