【问题标题】:Refering to other entities when using Linq2Sql and Sprocs使用 Linq2Sql 和 Sprocs 时引用其他实体
【发布时间】:2010-01-08 11:32:44
【问题描述】:

我们正在评估内部应用程序的 Linq2Sql,我们的开发指南意味着我们必须始终对所有 CRUD 操作使用存储过程,从各种博客中我收集了一个应用程序,它可以满足我们的大部分需求。

但是,我想做的是,当我们在两个实体之间建立关系时,关系可以自动实现。

例如,如果我有一个 Person 对象的实例,我希望能够说

var缺席计数=persons.Absence.Count()

但是因为我们没有对 Absence 表的选择权限,所以我们得到了一个 Sql 异常。

还有这个问题吗?

【问题讨论】:

    标签: .net linq linq-to-sql


    【解决方案1】:

    通过对所有数据库操作使用存储过程,您将失去像 Linq-To-SQL 这样的 ORM 和使用 LINQ 查询的大部分好处。例如,通过使用存储过程来检索所有数据,您将失去对所有查询进行强类型检查的能力。

    当然,您仍然可以将 L2S 与存储过程一起使用,但如果您的所有查询操作都必须通过存储过程完成,我真的看不出它的意义所在。

    要回答您的第二个问题,如果您无权对表执行 Select,您如何期望 L2S 能够填充 Absence 表?如果 L2S 能够以某种方式做到这一点,那么您建立的安全性又有什么意义?

    兰迪

    【讨论】:

    • 我的理解是,当您将 select 存储过程放到设计器中的表上时,它就变成了表的选择(尽管效率可能很低)我想情况并非如此
    • 是的,但是您仍然只是使用 L2S 执行存储过程来检索数据。 L2S 在这里并没有真正提供任何价值,而且您仍然没有对查询进行强类型检查。
    • 使用 L2S 有明显的好处,因为它会生成 DAL 并创建映射和 UOW,我们唯一缺少的问题是无法读取 entityref。
    • 其实这是完全可以的,下面看我的回答
    • 这个答案没有回答这个问题,它只是建议改变这个人的工作方式。我们中的许多人在大型组织中工作,这些组织的方式固定不变,从存储过程更改为选择访问需要比转动最大的油轮更多的时间和精力。
    【解决方案2】:

    我偶然发现了几篇证明这是可能的博客文章,我已经对其进行了测试,并且效果很好

    基本上将名为 Load 的方法调用到您的存储过程中添加到您的 DataContext 类中将允许它工作

    此处提供示例链接

    Damien Guard

    Msdn

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 2011-10-28
      • 2014-08-30
      • 1970-01-01
      • 2018-08-08
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多