我有一个Sybase数据库,我从它生成了一个ADO.Net Entity Data Model。下面是来自connectionString文件的App.config:
connectionString="metadata=res://*/Test.csdl|res://*/Test.ssdl|res://*/Test.msl;provider=iAnywhere.Data.SQLAnywhere;provider connection string="userid=testUser;password=testPassword;datasourcename=test"" providerName="System.Data.EntityClient"我尝试将新实体添加到数据库中具有单个autoincerement属性的表中:
while (true)
{
using (var context = new Entities())
{
var testEntity = new TestTable();
context.TestTables.Add(testEntity);
try
{
context.SaveChanges();
}
catch (Exception ex)
{
}
}
}这对于第一对(100,000次)迭代很好。但是在那之后,我得到了一个带有消息iAnywhere.Data.SQLAnywhere.SAException的Authentication violation,即源"SQL Anywhere .NET Data Provider",当调用context.SaveChanges()时。下面是堆栈跟踪:
at iAnywhere.Data.SQLAnywhere.SACommand._ExecuteReader(CommandBehavior commandBehavior, Boolean isExecuteScalar, Boolean isBeginExecuteReader)
at iAnywhere.Data.SQLAnywhere.SACommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)我用的是VS2012,.Net Framework v4.5,Entity Framework 5.0,SQLAnywhere 12 version 12.1.4216。
当然,这是一个简化的场景,在实际情况中,我不是在循环中调用SaveChanges(),不过,经过几次调用,我还是得到了相同的异常。任何知道为什么会抛出这个异常和什么是解决方案都会受到欢迎。
发布于 2015-07-03 15:03:08
似乎OEM版的SQL Anywhere可以有未经认证和认证的连接。未经身份验证的类只能从数据库中读取(理论上)并以某种方式写入数据库(在第一次写入之后30秒,在我的示例中是SaveChanges()调用)。下面是如何验证连接的代码:
private static string AuthCommand = "SET TEMPORARY OPTION CONNECTION_AUTHENTICATION='Company=COMPANY_NAME;Application=APPLICATION;Signature=SIGNATURE'";
private bool AuthCommandIssued = false;
public override int SaveChanges()
{
if (!AuthCommandIssued)
{
Database.ExecuteSqlCommand(AuthCommand);
AuthCommandIssued = true;
}
return base.SaveChanges();
}有关此以及如何开发经过身份验证的应用程序和获取身份验证参数的更多信息,请参见这里。
https://stackoverflow.com/questions/31189299
复制相似问题