【问题标题】:How to use Linq-to-SQL without having to generate all the classes?如何在不必生成所有类的情况下使用 Linq-to-SQL?
【发布时间】:2015-10-04 05:12:34
【问题描述】:

我以前从未在应用程序中使用过 Linq-to-Sql,但我使用 LinqPad 开发查询,只是想将其粘贴到我的代码中。

事情没那么简单。我猜我需要DataContext 来处理连接,但我仍然收到错误,因为无法识别视图名称。

我是否必须使用设计器并创建所有 View/Table- 类?有没有更简单的方法?

这是查询。不需要任何更新 - 只需这个查询....

var q = from user in V020
    join userapp in V010 on user.SPP_USER_ID equals userapp.SPP_USER_ID
    join app in V030 on userapp.SPP_AW_ID equals app.SPP_AW_ID
    join tx in V040 on app.SPP_AW_ID equals tx.SPP_AW_ID
    join appber in V070 on app.SPP_AW_ID equals appber.SPP_AW_ID
    join ber in V050 on appber.SPP_AW_BEREICH_ID equals ber.SPP_AW_BEREICH_ID 

    where app.SPP_AW_AKTIV && user.SPP_USER_ID == "userid" && tx.SPP_AW_SPR == "de" && ber.SPP_AW_SPR == "de"

    orderby ber.SPP_BER_SORTNB

    select new {
        AppName = app.SPP_AW_KURZBEZ, Url = tx.SPP_AW_URL, Label = tx.SPP_AW_NAME, Description = tx.SPP_AW_BESCHR,
        Bereich = ber.SPP_AW_BERNAME,
        Owner = app.SPP_AW_VERANTW, Remote = app.SPP_AW_REMOTE
    }

    ;

【问题讨论】:

  • 看看SQLMetal
  • 你是如何在 LinqPad 中获得这些对象的?
  • @DavidG - 在 LinqPad 中,我只是连接到数据库并编写查询。其他一切都是透明地完成的......

标签: c# linq datacontext


【解决方案1】:

  1. 创建一个dbml文件,如上
  2. 打开“服务器资源管理器”
  3. 连接到您的数据库
  4. 将要使用的表从数据库连接拖到设计器上
  5. 聚会时间

【讨论】:

  • 谢谢,但我的问题不是“怎么做”,而是“有必要吗”。我真的必须创建所有的类吗? LinqPad 可能在幕后做所有这些 - 不知道
  • @paul 你必​​须这样做。没有它,这是不可能的。
  • @paul 是的,LinqPad 正在为您生成所有课程。
【解决方案2】:

在 EF 中,我使用了 context.Database.ExecuteSQLCommand 来运行存储过程,而无需使用域模式设计器(并因此生成表)。我相信你可以在 Linq to SQL 中做类似的事情。但是,这将不支持您拥有的 linq 查询。您需要移动存储过程中的所有逻辑。

SiteManagedRepairDetails 模型属性:

 public long RepairID { get; set; }
 public int RepairLineID { get; set; }

DAL 方法:

public static int UpsertData(SiteManagedRepairDetails obj)
        {

            XYZ.DBContexts.VoidsDBContext context = new XYZ.DBContexts.VoidsDBContext();
            var results = context.Database.ExecuteSqlCommand("p_XYZDetailsUpsert @RepairID, @RepairLineID"
                , new SqlParameter("@RepairID", obj.RepairID)
                , new SqlParameter("@RepairLineID", obj.RepairLineID)
            );
            return 0;
        }

【讨论】:

  • 这真的是 linq-to-SQL ... 吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多