有没有办法在不添加.dbml文件的情况下使用Linq to SQL?

时间:2016-06-17 05:33:29

标签: c# linq

我正在使用Linq to SQL并且总是通过添加一个.dbml文件作为我的应用程序和SQL服务器之间的桥梁,我很好奇是否有任何方法可以使用Linq to SQL而不使用。 dbml文件?我偶然发现了Link here,但不可理解的是,有人可以对此有所了解。

2 个答案:

答案 0 :(得分:6)

当然可以。事实上,当我第一次学习LINQ-to-Sql时,dbml文件的自动生成的代码实际上在开始时对我来说实在是太多了。所以我开始逐个装饰我的POCO课程,然后开始学习编写LINQ查询。以下是一个快速入门示例:

我创建了一个数据库" businessLinqToSql"一个名为 Ex: Mappings: { "properties":{ "a":{"type":string}, "b":{"type":string} } } 的表。使用下面提到的SQL脚本:

Customer

创建一个C#控制台应用程序并添加一个名为USE [businessLinqToSql] GO /****** Object: Table [dbo].[Customer] Script Date: 06/17/2016 11:28:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Customer]( [ID] [int] NOT NULL, [Name] [nchar](30) NOT NULL, [Address] [nchar](30) NULL, CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO 的代码文件,如下所示。它将是您的POCO类,其中包含一些声明属性,这些属性为LINQ-to-SQL提供程序提供了有关数据库模式的提示:

Customer.cs

然后你可以在主函数中写下LINQ查询:

[Table(Name="Customer")]
public class Customer
{

    [Column(IsPrimaryKey = true)]
    public int ID { get; set; }

    [Column] 
    public string Name { get; set; }

    [Column]
    public string Address { get; set; }

}

答案 1 :(得分:2)

如果您需要使用上下文的属性进行查询(context.TableName),则

您需要在某个地方自动或手动生成类(实体框架代码优先方法)。

但是没有魔法让上下文包含所有表而没有生成的类文件[,这是你的情况下dbml的一部分]

但是,您可以创建自己的类并使用TableAttribute。这是您手动复制dbml正在执行的操作。请查看此link了解更多信息。

以上链接的一些例子:

[Table] 
public class Customer
{
   [Column(IsPrimaryKey=true)]  
   public int ID;
   [Column]                     
   public string Name;
}

public class DemoDataContext : DataContext
{
  public DemoDataContext (string cxString) : base (cxString) { }

  public Table<Customer> Customers { get { return GetTable<Customer>(); } }
  public Table<Purchase> Purchases { get { return GetTable<Purchase>(); } }
}

用法:

var db = new DataContext();
var customers = db.GetTable<Customer>();
var query = customers.Where (c => c.Name.StartsWith ("a"));
相关问题