我的问题是关于我的应用程序应如何更改与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个小时来寻找有效的解决方案,但是这些解决方案似乎永远都是多余的,并且从未解决问题。