在实体框架中为单表手动创建模型

Eri*_*ikE 3 c# entity-framework linqpad

一季度。如何为我的数据库中的单列表手动创建一个死简单的实体框架模型,并对其进行查询?

该表如下所示:

CREATE TABLE dbo.MyTable (
    Value int NOT NULL CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED
);
Run Code Online (Sandbox Code Playgroud)

我有一个 POCO 可以映射到它:

public class MyTable {
    public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Q2。然后,如何MyTable使用Expression<Func<MyTable, bool>>lambda 进行查询,该lambda 将决定返回哪些行并将投影到 SQL 中?

我对 EF 比较陌生,但对 C# 或软件开发并不陌生。我问这个问题是因为现在我只想快速证明 LINQPad 中某些东西的概念,而不使用 EF 实体数据模型向导,因此将来很容易编写出这样的代码。

And*_*ykh 5

您所需要的只是下面的代码,准备粘贴到 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();
}
Run Code Online (Sandbox Code Playgroud)

您需要确保引用EntityFrameworkNuGet 包和System.ComponentModel.Annotations.dll. 以下是我使用的命名空间:

System.ComponentModel.DataAnnotations.Schema
System.Data.Entity
System.Data.Entity.ModelConfiguration
System.Data.Entity.ModelConfiguration.Configuration
Run Code Online (Sandbox Code Playgroud)