Отображение типа CLR в тип EDM является неоднозначным, поскольку несколько типов CLR соответствуют типу EDM - PullRequest
0 голосов
/ 25 декабря 2018

Мой вопрос касается того, как мое приложение должно изменить соединение между онлайн-соединением с базой данных SQL Azure на автономную базу данных SQLite.

Я нашел способ, как заставить мое приложение использовать онлайн или офлайнбаза данных.

Но когда я пытаюсь создать переменную с именем Context и вернуть ее одним из двух классов DbContextClass.Переключение между ними, кажется, является чем-то, что фрейму Entity не нравится.

Сначала я подумал, что мог бы использовать тот же EMDX, чтобы я мог использовать одно и то же имя DbContextClassname и использовать строки разных соединений в моем приложении..Config, но тогда это дает мне следующее исключение:

    System.Data.Entity.Core.MetadataException
    HResult=0x80131939
    Message=Schema specified is not valid. Errors: 
    The mapping of CLR type to EDM type is ambiguous because multiple CLR 
    types match the EDM type 'Account'. Previously found CLR type 
    'Domain.Account', newly found CLR type 'SQLiteDataBase.Account'.

Итак, следует ли создать интерфейс / абстрактный каркас Entity, который будет унаследован онлайн-базой данных и автономным фреймом Entity.Или есть более эффективное решение?

В данный момент я использую начинающую конфигурацию шаблона хранилища, где я хотел бы переключаться между двумя соединениями.Является ли это правильным способом ведения дел или я немного глуп?

public abstract class RepositoryBase
{
    protected EntitiesContext Context { get => getConnString();  }

    private DBEntities getConnString()
    {
        DBEntities connString;
        connString = new DBEntities("name=DBEntities");
        if (IsInternetAvailable())
        {
            return connString;
        }
        else
        {
            return connString = new DBEntities("name=SQLiteDBEntities");
        }
    }

    [DllImport("wininet.dll")]
    private extern static bool InternetGetConnectedState(out int description, int reservedValue);

    private static bool IsInternetAvailable()
    {
        int description;
        return InternetGetConnectedState(out description, 0);
    }
}

Я уже потратил около 5 часов в Интернете на поиск эффективного решения, но решения всегда кажутся излишними и лишними.никогда не решая проблему.

...