使用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默认使用其表名约定?
答案 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");
///...
}