У меня есть этот объект:
public class MyEntity
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
Я хочу, чтобы эта сущность была сопоставлена с базой данных Oracle 11g Oracle как MySchema.MyEntity
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>().ToTable("MyEntity", "MySchema");
base.OnModelCreating(modelBuilder);
}
Проблема в том, что когда я пытаюсь добавить сущность и выполняю SaveChanges, он полностью игнорирует часть схемы ToTable (), даже если я добавляю атрибут [Table ("MySchema.MyEntity")] в класс это также игнорируется. Схема всегда будет именем входа в строку подключения независимо от того, что я делаю.
DbConnection con = new Devart.Data.Oracle.OracleConnection(
"User Id=system;Password=admin;Server=XE;Persist Security Info=true;");
Имя схемы всегда соответствует имени пользователя. Это изменится, только если я напишу явно, что:
con.ChangeDatabase("MySchema"); //this will only work if the database connection is open...
Но теперь я хочу это записать ...
Как заставить это работать?
EDIT:
О боже ... Решение:
Во-первых: UPPERCASESCHEMANAMES !!!
Второе: в официальном примере dotconnect есть строка:
config.Workarounds.IgnoreSchemaName = true;
Удалить его ... (это будет работать, только если вы зададите имя схемы для ВСЕХ ваших сущностей, в противном случае будет использоваться схема "dbo", которой нет в oracle ...)