[英]Entity Framework SaveChanges not using provided Schema
Assume a (simplified) domain object like this: 假设一个(简化的)域对象,如下所示:
public class MyObject
{
public Guid Id { get; set; }
public String Field1 { get; set; }
public String Field2 { get; set; }
}
Attached to my context in this manner: 以这种方式附加到我的上下文:
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());
}
}
And mapped like so: 并映射如下:
public class MyObjectMapping : EntityTypeConfiguration<MyObject>
{
public MyObjectMapping()
{
ToTable("MyObject", "myschema");
HasKey(x => x.Id);
}
}
Yet, if I load my object from xml and save it to DB: 但是,如果我从xml加载我的对象并将其保存到DB:
var myObject = MyObjects.FromXml(xmlFilepath).ToDomain();
var context = new MyDbContext();
context.MyObjects.Add(myObject);
context.SaveChanges();
I get this error: 我收到此错误:
System.Data.SqlClient.SqlException Invalid object name 'dbo.MyObjects'. System.Data.SqlClient.SqlException无效的对象名称'dbo.MyObjects'。
Where dbo
should be myschema
instead. dbo
应该是myschema
而不是。
Question 题
What should I do to make sure the correct schema is used instead of dbo? 我该怎么做才能确保使用正确的架构而不是dbo?
I set the schema specifically on the context and mapping definition, what am I missing? 我在上下文和映射定义中专门设置了模式,我缺少什么?
Looks to be a bug in EF6
, if I set things up the DatAnnotation
way instead of Fluent
, I can generate the database I want. 看起来是一个错误EF6
,如果我设置的东西了DatAnnotation
方式,而不是Fluent
,我可以生成我想要的数据库。 So I decorate my domain object like so: 所以我像这样装饰我的域对象:
[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; }
}
That fixed it for me. 这为我解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.