Entity Framework SaveChanges 未使用提供的架构
Entity Framework SaveChanges not using provided Schema
假设一个(简化的)域对象如下:
public class MyObject
{
public Guid Id { get; set; }
public String Field1 { get; set; }
public String Field2 { get; set; }
}
以这种方式附加到我的上下文:
public class MyDbContext : DbContext
{
public DbSet<MyObject> MyObjects { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("myschema");
modelBuilder.Configurations
.AddFromAssembly(Assembly.GetExecutingAssembly());
modelBuilder.Conventions
.AddFromAssembly(Assembly.GetExecutingAssembly());
}
}
并像这样映射:
public class MyObjectMapping : EntityTypeConfiguration<MyObject>
{
public MyObjectMapping()
{
ToTable("MyObject", "myschema");
HasKey(x => x.Id);
}
}
然而,如果我从 xml 加载对象并将其保存到数据库:
var myObject = MyObjects.FromXml(xmlFilepath).ToDomain();
var context = new MyDbContext();
context.MyObjects.Add(myObject);
context.SaveChanges();
我收到这个错误:
System.Data.SqlClient.SqlException Invalid object name
'dbo.MyObjects'.
其中 dbo
应该是 myschema
。
问题
What should I do to make sure the correct schema is used instead of
dbo?
我专门根据上下文和映射定义设置了架构,我缺少什么?
看起来是 EF6
中的错误,如果我以 DatAnnotation
方式而不是 Fluent
方式进行设置,我可以生成我想要的数据库。所以我像这样装饰我的领域对象:
[Table("MyObject", Schema = "myschema")]
public class MyObject
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
public String Field1 { get; set; }
public String Field2 { get; set; }
}
帮我修好了。
假设一个(简化的)域对象如下:
public class MyObject
{
public Guid Id { get; set; }
public String Field1 { get; set; }
public String Field2 { get; set; }
}
以这种方式附加到我的上下文:
public class MyDbContext : DbContext
{
public DbSet<MyObject> MyObjects { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("myschema");
modelBuilder.Configurations
.AddFromAssembly(Assembly.GetExecutingAssembly());
modelBuilder.Conventions
.AddFromAssembly(Assembly.GetExecutingAssembly());
}
}
并像这样映射:
public class MyObjectMapping : EntityTypeConfiguration<MyObject>
{
public MyObjectMapping()
{
ToTable("MyObject", "myschema");
HasKey(x => x.Id);
}
}
然而,如果我从 xml 加载对象并将其保存到数据库:
var myObject = MyObjects.FromXml(xmlFilepath).ToDomain();
var context = new MyDbContext();
context.MyObjects.Add(myObject);
context.SaveChanges();
我收到这个错误:
System.Data.SqlClient.SqlException Invalid object name 'dbo.MyObjects'.
其中 dbo
应该是 myschema
。
问题
What should I do to make sure the correct schema is used instead of dbo?
我专门根据上下文和映射定义设置了架构,我缺少什么?
看起来是 EF6
中的错误,如果我以 DatAnnotation
方式而不是 Fluent
方式进行设置,我可以生成我想要的数据库。所以我像这样装饰我的领域对象:
[Table("MyObject", Schema = "myschema")]
public class MyObject
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
public String Field1 { get; set; }
public String Field2 { get; set; }
}
帮我修好了。