Entity Framework SaveChanges не использует предоставленную схему - PullRequest
0 голосов
/ 04 июня 2019

Предположим (упрощенный) доменный объект, подобный этому:

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 Неверное имя объекта 'dbo.MyObjects'.

Где dbo вместо myschema.

Вопрос

Что я должен сделать, чтобы убедиться, что вместо схемы используется правильная схема ПСЭ?

Я установил схему специально для определения контекста и сопоставления, что мне не хватает?

1 Ответ

0 голосов
/ 13 июня 2019

Выглядит как ошибка в 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; }
}

Это исправило это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...