为 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 实体数据模型向导,这样将来很容易编写出这样的代码。

  1. 要么使用 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)。

  1. 像这样:

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