我正在通过COM在C ++非托管解决方案中实现C#项目。 C#项目使用EntityFramework来返回有关数据库的值。
当我们在此解决方案中从UnitTest C#项目调用“Test()”方法时,一切都很顺利。当我们从非托管C ++调用它时,在被调用的“Test()”方法中发生异常。
例外:
No connection string named 'Entities' could be found in the application
config file.
非托管C ++中我们称之为“Test()”方法的位置:
AServer::Server_InterfacePtr p(__uuidof(AServer::Server));
long res = p->Test(); // gives 1337, WRONG: it should give the count of users
C#项目中的被调用方法:
public int Test()
{
TextWriterTraceListener myTextListener = new TextWriterTraceListener(@"C:\log.txt");
Trace.Listeners.Add(myTextListener);
try
{
Entities model = new Entities();
ObjectResult<UserGetAll_Result> res = model.UserGetAll();
return res.Count;
}
catch (Exception e)
{
Trace.WriteLine(e.Message); // writes out "No connection string named 'Entities' could be found in the application config file."
return 1337;
}
}
Unittest方法:
[TestMethod]
public void TestMethod1()
{
Server server = new Server();
var res = server.Test(); // OK: gives the count of users
}
反正我们可以解决这个问题吗?我们考虑在“Test()”方法中将ConnectionString作为参数在模型的构造函数中使用它,但是显然Entities
在它的构造函数中不接受ConnectionString作为参数。
在App.Config
的C#项目(包括unittest)中提供了connectionstring。 AntityFramework的使用版本是5.解决方案针对frameworkversion 4.0。
不使用EntityFramework的方法工作正常。