【问题标题】:How to specify table name with Entity Framework Code First Fluent API如何使用 Entity Framework Code First Fluent API 指定表名
【发布时间】:2013-12-09 16:21:32
【问题描述】:

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

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

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

我在 MSDN 上搜索过,但一无所获。那么这是否可能以及如何实现?

谢谢。

【问题讨论】:

  • 一般来说,您应该创建 DTO(数据传输对象)并将您的 EF 对象映射到它们,除非您正在开发一个小型/琐碎的应用程序,否则您永远不应该直接使用 EF 类。

标签: c# entity-framework ef-code-first code-first


【解决方案1】:

你也可以使用表格注解:

[Table("InternalBlogs")]
public class Blog

见: Code First Data Annotations

【讨论】:

  • 谢谢,但如果你仔细阅读我的问题 - 你会直接在它的中间看到那个 apptoach :)
  • 即使注释被命名为“表格”,它似乎也适用于视图和表格。
  • @JonSchneider 我只是在这里无缘无故地争论定义,但视图是只读表。
  • Table 注释位于 System.ComponentModel.DataAnnotations.Schema;.
  • 这怎么得到更多的赞成票,问题清楚地要求流畅的api版本
【解决方案2】:

您将使用.ToTable() 方法:

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

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

【讨论】:

  • 我更喜欢这个,因为我想把所有注释放在一个地方
  • 它是否有任何验证表存在?我们重命名了一个表并且没有任何损坏,这是您期望的行为吗?它显然不能对重命名的表进行 CRUD,但它似乎并没有破坏任何东西......
【解决方案3】:

使用 ToTable 方法:

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

    public MyEntityMap()
    {                   
        ToTable(TableName);

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

【讨论】:

  • 我认为将映射分解为类是最简洁的方法。
  • 但是在您的 OnModelCreating 方法中,您必须这样做:modelBuilder.Configurations.Add(new MyEntityMap()); 而不是您可以添加一个 modelBuilder.Entity&lt;MyEntity&gt;().ToTable("MyEntityTable"); 所以不,这不是更清洁的方法,除非您还有其他为这个实体做的映射。
猜你喜欢
  • 1970-01-01
  • 2014-02-07
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多