Значение не может быть нулевым при использовании объединения в OrmLite / Servicestack / Linqpad - PullRequest
0 голосов
/ 04 июня 2018

При соединении двух таблиц я получаю ArgumentNullException: Value cannot be null. Parameter name: key.

Это происходит после выполнения запроса, изменения любой строки в Linqpad и повторного выполнения.

using (var db = _factory.OpenDbConnection())
{
    var q = db.From<Customer>()
    .Join<Customer, Address>();

    var results = db.SelectMulti<Customer, Address>(q); 

    results.Dump();
}

Customer

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Адрес

public class Address
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
}

ServiceStack выдает эту ошибку

   at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
      at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
      at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
      at ServiceStack.TypeExtensions.GetActivator(ConstructorInfo ctor)
      at ServiceStack.OrmLite.OrmLiteUtils.ConvertToList[T](IDataReader reader, IOrmLiteDialectProvider dialectProvider, HashSet`1 onlyFields)
      at ServiceStack.OrmLite.OrmLiteResultsFilterExtensions.ExprConvertToList[T](IDbCommand dbCmd, String sql, IEnumerable`1 sqlParams, HashSet`1 onlyFields)
      at ServiceStack.OrmLite.ReadExpressionCommandExtensions.SelectMulti[T,T2](IDbCommand dbCmd, SqlExpression`1 q)
      at ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func`2 filter)
      at UserQuery.Main() in C:\Users\kairu\AppData\Local\Temp\LINQPad5\_uimlqbjb\plnhhb\LINQPadQuery.cs:line 54
      at LINQPad.ExecutionModel.ClrQueryRunner.Run()
      at LINQPad.ExecutionModel.Server.RunQuery(QueryRunner runner)
      at LINQPad.ExecutionModel.Server.StartQuery(QueryRunner runner)
      at LINQPad.ExecutionModel.Server.<>c__DisplayClass153_0.<ExecuteClrQuery>b__0()
      at LINQPad.ExecutionModel.Server.SingleThreadExecuter.Work()
      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      at System.Threading.ThreadHelper.ThreadStart()

Использование ServiceStack версии 5.1.0 net45

1 Ответ

0 голосов
/ 04 июня 2018

Этот пример работает должным образом на Gistlyn :

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Address
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
}

db.CreateTable<Customer>();
db.CreateTable<Address>();
db.Insert(new Customer { Id = 1, Name = "C" });
db.Insert(new Address { Id = 1, CustomerId = 1 });


var q = db.From<Customer>()
    .Join<Customer,Address>();

var results = db.SelectMulti<Customer, Address>(q);

results.PrintDump();

Возможно, это проблема с LINQ Pad.

...