使用默认表名称&自定义架构w / EF Code First

时间:2018-01-24 15:22:18

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

使用EF代码首先,我想为表指定一个模式(Data),但让EF使用其默认约定来命名表。

我正在使用DataAnnotations.Schema TableAnnotations来设置架构。

[Table("Customers", Schema = "Data")]
public class Customer
{
    public int Id{ get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

但这需要我手动设置Name,而我希望EF使用其约定命名表。

我尝试使用空字符串设置Name

[Table("", Schema = "Data")]

抛出以下内容 - 非常合理,预期 - 错误:

  

参数'name'不能为null,为空或仅包含空格。

在指定架构时,有没有办法让EF默认使用其表名约定?

2 个答案:

答案 0 :(得分:0)

这不能完成,因为Table属性只有一个构造函数,需要指定Name

请参阅MSDN - TableAttribute Constructor

public TableAttribute(
string name
)

答案 1 :(得分:0)

Slava Utesinov建议使用modelBuilder.HasDefaultSchema("Data");设置默认schma。

当只有一个模式可以设置时,这将起作用;但是,如果要应用多个架构,则无法正常工作,而无需手动设置表名。

public class ExampleContext: DbContext
{
    public ExampleContext() : base("ExampleContext") { }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("Data");
        ///...
    }