获取NullReferenceException IRepository.Insert调用DNN Evoq 8.2

时间:2016-02-03 15:17:13

标签: c#-4.0 dotnetnuke repository-pattern dotnetnuke-7

我正在为我们的网站开发自定义模块。流程如下:

  • 客户点击特定页面
  • 页面检测客户是否经过身份验证
    • 否 - 强制登录/注册
    • 是 - 继续
  • 验证客户数据
  • 从姐妹网站
  • 检索令牌和ttl
  • 在数据库表中存储数据
  • 使用令牌登录
  • 将客户重定向到姊妹网站

我有以下课程:

[TableName("AutoRegister_Data")]
[PrimaryKey("rId", AutoIncrement = true)]
[Scope("ModuleId")]
[Cacheable("AutoRegister_Data", CacheItemPriority.Normal, 20)]
public class RegisterData
{
    public int rId { get; set; }
    public int UserID { get; set; }
    public string Email { get; set; }
    public string LastToken { get; set; }
    public DateTime LastUpdate { get; set; }
}

使用以下代码更新数据库

using (IDataContext db = DataContext.Instance())
{
    var repo = db.GetRepository<RegisterData>();
    var user = repo.Find($"WHERE UserID = {currentUser.UserID}");

    db.BeginTransaction();

    try
    {
        if (!user.Any())
        {
            repo.Insert(dataRecord);
            db.Commit();
        }
        else
        {
            string query = string.Empty;
            if (token != null)
            {
                query = $"SET [LastUpdateDate] = \'{DateTime.Now}\', [LastToken] = \'{token}\' WHERE [UserID] = {currentUser.UserID}";
            }
            repo.Update(query);
        }
    }
    catch (Exception ex)
    {
        db.RollbackTransaction();
        Exceptions.ProcessModuleLoadException(this, ex);
    }
}

dataRecord属于RegisterData类。

我得到的Object引用没有设置为对象错误的实例。

如果我从事务块中取出更新,则表会使用正确的数据进行更新,但仍会出现错误。

非常感谢任何指导。

〜斯科特

1 个答案:

答案 0 :(得分:1)

enter code here Find方法获取数据库中对象的id,或者更好地调用数据库中表的主键值。替换Where子句,如下面的代码

var user = repo.Where(UserID == $"{currentUser.UserID}");