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