Сначала отключение столбца в коде Entity Framework - PullRequest
0 голосов
/ 07 октября 2018

Я использую Entity Framework для вставки данных в 2 разные базы данных.Есть несколько столбцов, которые присутствуют в одной из баз данных, но нет другой.Их типы данных не обнуляются (int и float).

Я не использую эти столбцы (когда они присутствуют) в моем коде.Это означает, что я только вставляю 0 в качестве данных для них, но я не могу явно отправить ноль.

Есть ли способ для меня, чтобы легко вставлять данные, не создавая две разные версии моего приложения для них?В идеале я хотел бы иметь одну модель с чем-то вроде атрибута, который говорит, вставьте 0 в этот столбец, если он доступен.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

В хранилище для базы данных с ограниченными полями создайте сущность:

public class MyClass
{
   int MyCommonClassID {get; set;}
   string Name {get; set;}
   [NotMapped]
   string PhoneNumber {get; set;}
}

Где атрибут [NotMapped].используется, это поле не появится в базе данных, но вы можете использовать его в другом месте.То, что вы определяете, что пишется на самом низком уровне, и ваше приложение не заботится.

0 голосов
/ 07 октября 2018

Если ваше приложение работает только с одной базой данных, вы можете просто использовать оператор IF в OnModelCreating, который использует Fluent API, чтобы .Ignore () отсутствующие свойства.

public class MyDbContextWithMissingColumns: MyDbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        if (myConfig.UseDatabaseWithoutSomeProperties)
        {
          modelBuilder.Entity<Foo>().Ignore(f => f.SomeProperty);
        }
        base.OnModelCreating(modelBuilder);
    }
}

Если один экземпляр вашего приложения подключается к обеим базам данных, вам нужно использовать отдельный подтип DbContext, поскольку OnModelCreating запускается только для первого экземпляра типа DbContext в домене приложения.

EG:

public class MyDbContextWithMissingColumns: MyDbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Foo>().Ignore(f => f.SomeProperty);
        base.OnModelCreating(modelBuilder);
    }
}
...