Q1.如何为数据库中的一列表手动创建一个死的简单实体框架模型并进行查询?
表格如下:
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
,该lambda将决定返回哪些行并将其投影到SQL中?
我对EF比较陌生,但对C#或软件开发不是很熟悉。我之所以问这个问题,是因为现在我只想在LINQPad中快速验证某些东西的概念,而不使用EF实体数据模型向导,所以将来很容易生成这样的代码。
您只需要在下面的代码中,即可粘贴到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
- 使用EF的
code first
(例如数据公告)定义映射并创建上下文类以访问实体集,或者使用EDMX
(模型优先或数据库优先)创建模型和映射并为您生成模型和上下文。在线搜索任何实体框架入门指南
例如,Code First(在此页面中搜索Create the Data Model
)或EDMX(在此页面搜索Creating the Entity Framework Data Model
)。
- 就像这样:
using (var context = new YourContext())
{
var filteredEntities = context.YourEntities.Where(expression).ToList();
}
但是,您的表需要PK(主键)才能工作。