【问题标题】:bltoolkit association with stored procedure executionbltoolkit 与存储过程执行的关联
【发布时间】:2012-04-06 18:41:06
【问题描述】:

我有 2 个实体:

[TableName("is_userrole")]



public class UserRole
  {
      [MapField("id"), PrimaryKey, Identity,
      public Guid id;
      [NotNull]
      public string Name;       
  }    
[TableName("is_users")]
  public class User
  {
      [MapField("id"), PrimaryKey, Identity,
NonUpdatable]
      public Guid Id;
      [NotNull]
      public string Name;
      [NotNull]
      public string Login;
      [NotNull]
      public string Password;

      public Guid UserRole_Id;    
      [Association(ThisKey = "UserRole_Id", OtherKey = "Id",
CanBeNull = false)]
      public UserRole UserRole;
  }    

以及从查询中获取数据的sql server上的存储过程

[Select u., r. from is_users u 内连接 is_userrole r on u.userrole_id = r.id]

如果我使用像

这样的 linq 查询

var query = 来自 db.User 中的 u 选择新的 { 身份证, u.登录, u.密码, u.UserRole_Id, u.UserRole };

关联填充,但如果我执行过程仅填充父对象(即用户)。
如何在 bltoolkit.net 中与存储过程建立关联? 还是只能手动实现?

谢谢。

【问题讨论】:

    标签: associations bltoolkit proc


    【解决方案1】:

    好的,所以我对此没有任何经验,但我很快查看了单元测试,看起来 MapResultSet 可以帮助你

    单元测试在这里 -> UnitTests\CS\Mapping\ResultSetTest.cs

    【讨论】:

    • 我有 SP - SelectByLogin(string) 和 public abstract class UserAccessor : gosDBAccessor { public abstract User SelectByLogin(string @login);这个 SP 有复杂的查询,里面有 INNER JOIN。执行 - UserAccessor ua = DataAccessor.CreateInstance();用户用户 = ua.SelectByLogin(Login);此用户未填充 UserRole 属性。 mapset 包含在代码中的位置在哪里?
    • 这里真的没看懂你的问题,你看单元测试了吗?
    【解决方案2】:

    AssosiationAttribute 仅用于 Linq 表达式。

    要知道:BLT 不执行任何“隐藏”操作,例如。如果您将 linq 代码更改为:db.User.ToList(),您将看到 UserProperty 未填写。在您的示例中填充已完成,因为您已在 select clausue 中说过要完成,并且Association 仅用于在 SQL 中构建正确的“INNER JOIN”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 2015-05-22
      相关资源
      最近更新 更多