为 Entity Framework 中的单个 table 手动创建模型
Manually create model for single table in Entity Framework
Q1. 如何在我的数据库中为单列 table 手动创建一个非常简单的 entity framework 模型,并查询它?
table 看起来像这样:
CREATE TABLE dbo.MyTable (
Value int NOT NULL CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED
);
我有一个 POCO 可以映射到它:
public class MyTable {
public int Value { get; set; }
}
Q2. 然后,我如何使用 Expression<Func<MyTable, bool>>
lambda 查询 MyTable
来决定哪些行要 return 并得到投影到 SQL?
我是 EF 的新手,但不是 C# 或软件开发的新手。我问这个问题是因为现在我只想在 LINQPad 中做一些概念的快速证明,而不使用 EF 实体数据模型向导,这样将来很容易编写出这样的代码。
- 要么使用 EF 的
code first
(例如数据注释)定义映射并创建上下文 class 以访问实体集,要么使用 EDMX
(模型优先或数据库优先) ) 用于创建模型和映射,并为您生成模型和上下文。在线搜索任何 Entity Framework 入门指南。
例如Code First (Search for Create the Data Model
in this page) or for EDMX(在此页面中搜索 Creating the Entity Framework Data Model
)。
- 像这样:
using (var context = new YourContext())
{
var filteredEntities = context.YourEntities.Where(expression).ToList();
}
但是,您的 table 需要 PK(主键)才能正常工作。
您只需要在下面的代码中,即可粘贴到 LinqPad
class MyTable
{
public int Value { get; set; }
}
class MyTableConfiguration : EntityTypeConfiguration<MyTable>
{
public MyTableConfiguration()
{
ToTable("dbo.MyTable");
HasKey(x => x.Value);
Property(x => x.Value).HasColumnName("Value").IsRequired();
}
}
class MyDbContext : DbContext
{
public IDbSet<MyTable> MyTableSet { get; set; }
public MyDbContext(string connectionString) : base(connectionString)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new MyTableConfiguration());
}
}
void Main()
{
MyDbContext context = new MyDbContext("Data Source=(local);Initial Catalog=SO33426289;Integrated Security=True;");
Expression<Func<MyTable, bool>> expr = x => x.Value == 42;
context.MyTableSet.Where(expr).Dump();
}
您需要确保引用 EntityFramework
NuGet 包和 System.ComponentModel.Annotations.dll
。以下是我使用的名称空间:
System.ComponentModel.DataAnnotations.Schema
System.Data.Entity
System.Data.Entity.ModelConfiguration
System.Data.Entity.ModelConfiguration.Configuration
Q1. 如何在我的数据库中为单列 table 手动创建一个非常简单的 entity framework 模型,并查询它?
table 看起来像这样:
CREATE TABLE dbo.MyTable (
Value int NOT NULL CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED
);
我有一个 POCO 可以映射到它:
public class MyTable {
public int Value { get; set; }
}
Q2. 然后,我如何使用 Expression<Func<MyTable, bool>>
lambda 查询 MyTable
来决定哪些行要 return 并得到投影到 SQL?
我是 EF 的新手,但不是 C# 或软件开发的新手。我问这个问题是因为现在我只想在 LINQPad 中做一些概念的快速证明,而不使用 EF 实体数据模型向导,这样将来很容易编写出这样的代码。
- 要么使用 EF 的
code first
(例如数据注释)定义映射并创建上下文 class 以访问实体集,要么使用EDMX
(模型优先或数据库优先) ) 用于创建模型和映射,并为您生成模型和上下文。在线搜索任何 Entity Framework 入门指南。
例如Code First (Search for Create the Data Model
in this page) or for EDMX(在此页面中搜索 Creating the Entity Framework Data Model
)。
- 像这样:
using (var context = new YourContext())
{
var filteredEntities = context.YourEntities.Where(expression).ToList();
}
但是,您的 table 需要 PK(主键)才能正常工作。
您只需要在下面的代码中,即可粘贴到 LinqPad
class MyTable
{
public int Value { get; set; }
}
class MyTableConfiguration : EntityTypeConfiguration<MyTable>
{
public MyTableConfiguration()
{
ToTable("dbo.MyTable");
HasKey(x => x.Value);
Property(x => x.Value).HasColumnName("Value").IsRequired();
}
}
class MyDbContext : DbContext
{
public IDbSet<MyTable> MyTableSet { get; set; }
public MyDbContext(string connectionString) : base(connectionString)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new MyTableConfiguration());
}
}
void Main()
{
MyDbContext context = new MyDbContext("Data Source=(local);Initial Catalog=SO33426289;Integrated Security=True;");
Expression<Func<MyTable, bool>> expr = x => x.Value == 42;
context.MyTableSet.Where(expr).Dump();
}
您需要确保引用 EntityFramework
NuGet 包和 System.ComponentModel.Annotations.dll
。以下是我使用的名称空间:
System.ComponentModel.DataAnnotations.Schema
System.Data.Entity
System.Data.Entity.ModelConfiguration
System.Data.Entity.ModelConfiguration.Configuration