假设这样的(简化的)域对象:
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加载对象并将其保存到DB:
var myObject = MyObjects.FromXml(xmlFilepath).ToDomain();
var context = new MyDbContext();
context.MyObjects.Add(myObject);
context.SaveChanges();
我收到此错误:
System.Data.SqlClient.SqlException无效的对象名称 'dbo.MyObjects'。
dbo
应该改为myschema
。
问题
我该怎么做以确保使用正确的架构而不是 dbo?
我专门根据上下文和映射定义设置了架构,我缺少什么?
答案 0 :(得分:0)
在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; }
}
那为我解决了。