如何使用Entity Framework Code First Fluent API指定表名


85

我有一个实体,我要配置实体框架以将其映射到具有不同名称的数据库表。

我可以使用Code First DataAnnotationsDataAnnotations.Schema.TableAttribute)轻松地做到这一点。

但是由于现在的限制,我必须使用Code First Fluent API(我的域对象将由外部客户端使用,因此它们不应该是特定于技术的-例如,对DataAnnotations的任何引用)

我已经在MSDN上搜索了,但是什么也没找到。那么有可能吗?

谢谢。


通常,您应该创建DTO(数据传输对象)并将EF对象映射到它们,除非您使用的是小型/平凡的应用程序,否则切勿直接使用EF类。
reggaeguitar '16

Answers:


95

您将使用以下.ToTable()方法:

modelBuilder.Entity<Department>().ToTable("t_Department");   

来源:MSDN:http//msdn.microsoft.com/en-us/data/jj591617.aspx


1
我喜欢这个,因为我希望所有注释都集中在一个地方
rajeemcariazo

该表是否存在任何验证?我们重命名了一个表,但没有任何问题,这是您期望的行为吗?它显然不能在重命名的表上执行CRUD,但似乎没有破坏任何东西……
乍得AZ

216

您还可以使用Table批注:

[Table("InternalBlogs")]
public class Blog

请参阅: 代码优先数据注释


6
谢谢,但是,如果您仔细阅读我的问题-您会在中间直接看到该方法:)
bairog 2014年

2
即使注释被命名为“表格”,它对于视图和表格也都可以正常工作。
乔恩·施耐德

@JonSchneider我只是在这里毫无理由地争论定义,但是视图是只读表。
Erik Bergstedt,2015年

Table批注位于System.ComponentModel.DataAnnotations.Schema;中。
PéturIngi Egilsson

如何获得更多支持,这个问题显然要求使用流畅的api版本
Worthy7

7

使用ToTable方法:

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}

1
我认为将映射划分为类是最干净的方法。
SventoryMang

1
但是,然后在您的OnModelCreating方法中必须执行:modelBuilder.Configurations.Add(new MyEntityMap());在这里您可以添加一个modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");so no,而不是在其中添加一个no,除非您还需要对此实体进行其他映射,否则这不是更干净的方法。
Serj Sagan's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.