【问题标题】:RavenDB load related data not workingRavenDB 加载相关数据不起作用
【发布时间】:2015-01-17 07:13:06
【问题描述】:

以下代码在session.Load<Employee>(order.Employee) 上抛出异常,但我直接查询员工没有问题。

    static void LoadRelatedData()
    {
        using (var session = mystore.OpenSession())
        {
            var employeeFromQuery = session.Query<Employee>().FirstOrDefault();  //works
            var order = session.Include<Order>(o => o.Employee).Load("orders/819"); //works
            var employeeRelatedToOrder = session.Load<Employee>(order.Employee); //EXCEPTION
            var dynamicRelatedToOrder = session.Load<dynamic>(order.Employee); //works
        }
    }

    private static IDocumentStore mystore = new DocumentStore()
    {
        Url = "http://localhost:4444/RavenDB",
        DefaultDatabase = "Hello"
    }.Initialize();

我得到的例外是 -

An unhandled exception of type 'System.InvalidCastException' occurred in Raven.Client.Lightweight.dll

Additional information: Unable to cast object of type 'Raven.Abstractions.Linq.DynamicJsonObject' to type 'RavenApp.Employee'

.

我的代码基于http://ravendb.net/docs/article-page/2.5/Csharp/client-api/querying/handling-document-relationships

员工和订单数据由 Raven Create Sample Data 任务生成。

【问题讨论】:

  • 在 Build 3528 上运行这个没有问题;你在跑什么?
  • 下面的答案你有没有成功?如果没有,您能否更新您的问题以提供更多信息>

标签: c# types casting ravendb


【解决方案1】:

当您使用 Include 时,应该为您填充 order.Employee 并且不需要第二次加载。

static void LoadRelatedData()
{
    using (var session = mystore.OpenSession())
    {
        var employeeFromQuery = session.Query<Employee>().FirstOrDefault();
        var order = session.Include<Order>(o => o.Employee).Load("orders/819"); 

        // Access them directly, as they have been resolved
        var employeeRelatedToOrder = order.Employee; 
        var dynamicRelatedToOrder = (dynamic)order.Employee;
    }
}

【讨论】:

    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2017-09-12
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多