CLR类型到EDM类型的映射不明确,因为多个CLR类型与EDM类型匹配

时间:2018-12-25 16:33:33

标签: c# entity-framework entity-framework-6

我的问题是关于我的应用程序应如何更改与SQL azure数据库的联机连接与脱机SQLite数据库之间的连接。

我找到了一种方法,可以使我的应用程序使用联机或脱机数据库。

但是当我尝试创建一个名为Context的变量并使用两个DbContextClass之一返回它时。两者之间的切换似乎是实体框架不喜欢的。

起初,我以为我可以使用相同的EMDX,以便可以使用相同的DbContextClassname并在App.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'.

因此,应该创建一个由联机数据库和脱机数据库实体框架继承的接口/抽象实体框架吗? 还是有更有效的解决方案?

目前,我正在使用存储库模式的新手配置,我想在两个连接之间进行切换。这是做事的正确方法还是我有点愚蠢。

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);
    }
}

我已经在Internet上花费了大约5个小时来寻找有效的解决方案,但是这些解决方案似乎永远都是多余的,并且从未解决问题。

0 个答案:

没有答案