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

108

我有一个实体,需要配置Entity Framework将其映射到不同名称的数据库表。

使用Code First DataAnnotationsDataAnnotations.Schema.TableAttribute)可以轻松完成此操作。

但由于限制,现在必须使用Code First Fluent API(我的领域对象将被外部客户端使用,因此不应与DataAnnotations具有任何引用或相关性)

我已经在MSDN上搜索了一遍,但没有找到相关信息。所以是否可能以及如何实现呢?

谢谢。


通常情况下,您应该创建DTO(数据传输对象)并将EF对象映射到它们上面,除非您正在处理小型/琐碎的应用程序,否则不应直接使用EF类。 - reggaeguitar
3个回答

242

8
谢谢,但如果你仔细阅读我的问题 - 你会看到直接在其中部分的方法 :) - bairog
3
即使这个注解被命名为“Table”,它似乎对视图和表格同样有效。 - Jon Schneider
@JonSchneider 我只是在这里为了争论定义而争论,并没有特别的原因,但视图是一个只读表。 - Erik Bergstedt
1
Table注解位于System.ComponentModel.DataAnnotations.Schema;中。 - Pétur Ingi Egilsson
2
这个问题明显要求流畅的API版本,为什么它会有更多的赞? - Worthy7

126

1
我更喜欢这样做,因为我想要所有注释放在一个地方。 - rajeemcariazo
有没有验证表是否存在?我们重命名了一个表,但没有出现任何问题,这是你期望的行为吗?显然它无法对重命名后的表进行CRUD操作,但似乎并没有破坏任何东西... - AZ Chad

11
使用 ToTable 方法:
public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

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

1
我认为将你的映射分解成类是最干净的方法。 - SventoryMang
3
但是在你的 OnModelCreating 方法中,你必须这样做:modelBuilder.Configurations.Add(new MyEntityMap()); 而你也可以只添加一个 modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable"); 所以,除非你还有其他映射要做,否则这不是更清晰的方法。 - Serj Sagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接