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