gpt4 book ai didi

entity-framework - ExecuteStoreQuery 需要什么来尊重关系?

转载 作者:行者123 更新时间:2023-12-04 07:25:05 25 4
gpt4 key购买 nike

目前,在我看来,它失败时有点武断。这是我的情况。

实体 Foo:

 class Foo {
int FooID {get;set;
User Creator {get;set;}
Bar TheBar {get;set;}
DateTime CreatedDateTime {get;set;}
}

实体用户:
 class User {
int UserID {get;set;}
ObjectWhatchamacallit Foos {get;set;}
DateTime LastLogInDateTime {get;set;}
}

所以
 return DB.ExecuteStoreQuery<Foo>("SELECT *, 
Created AS CreatedDateTime,
LastLogIn AS LastLogInDateTime
FROM
[User]
JOIN Foo ON Foo.CreatorID = [User].UserID
JOIN Bar ON Foo.BarID = Bar.BarID",
"Foo");

会很好地加载 Foos,带有 Bars 而不是 Creators。
 return DB.ExecuteStoreQuery<User>("SELECT *, 
Created AS CreatedDateTime,
LastLogIn AS LastLogInDateTime
FROM
[User]
JOIN Foo ON Foo.CreatorID = [User].UserID",
"User");

没有表现得更好。用户已加载,但没有 Foo。

这可能是因为
  • Foo 和 User 中的别名?
  • 用户是 SQL 关键字? (我试过 aliasin [User] AS Creator,无济于事)
  • 别的东西?

  • 更新

    我一次又一次地遇到这个问题。我已经意识到别名 (1) 可能与它无关。用户是 T-SQL 关键字 (2) 在此特定实例中可能是一个问题,但在我遇到此问题的所有时间中并不常见。所以一般问题的答案是别的东西(3)。

    一个问题是,某些关系名称可能已从 edmx-designer 最初建议的与存储键列名称相对应的名称有所更改。但对我来说,这在任何情况下都是任意的。

    所以我再次提出标题中所述的一般性问题,EF 究竟如何推断查询返回的列的子集实际上是相关实体的一部分?

    最佳答案

    事实证明我被误导了。 ExecuteStoreQuery 尊重关系需要什么的答案?是把自己打晕,什么都不会。

    这有时对我有用的唯一原因是我的业务层隐藏了自动负载,如果我关注 IntelliTrace,我会很容易发现这一事实。

    直到昨天都没有希望,我被迫接受我的模型对于 EF 来说太复杂了,我准备平衡 50000 行 T-SQL 和一个充满显式负载的 Controller 之间的线。

    对于非常繁重的查询,我已经开始将查询分成几个,仍然使用 ExecuteStoreQuery。所有相关结果都会自动加载到上下文中,并适当设置关系。

    EF June 2011 CTF新品发布可能证明正是我 need .

    我知道 EFExtensions 中提供了类似的功能.存储过程返回多个结果集。在撰写本文时,我不确定此查询需要多少次访问数据库,但我无法想象为什么需要多次访问。每个结果集最多一个,这仍然比显式加载好很多。

    让我们看看这是如何实现的。

    关于entity-framework - ExecuteStoreQuery 需要什么来尊重关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5964167/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com