首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web.config -不支持关键字:'workstation id‘

Web.config -不支持关键字:'workstation id‘
EN

Stack Overflow用户
提问于 2014-07-24 22:33:21
回答 2查看 3.8K关注 0票数 1

我在somee.com的ftp服务器上上传了一个用ASP.NET MVC写的网站。

在web.config中,我有一个关于这部分的问题:

代码语言:javascript
复制
<connectionStrings>
  <add name="Entities" connectionString="workstation id=ICookDB.mssql.somee.com;packet size=4096;user id=***;pwd=***;data source=ICookDB.mssql.somee.com;persist security info=False;initial catalog=ICookDB" providerName="System.Data.EntityClient" />
</connectionStrings>

对于某些页面,我有这样的错误:

代码语言:javascript
复制
[ArgumentException: Keyword not supported: 'workstation id'.]
System.Data.EntityClient.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Hashtable synonyms) +8420372
System.Data.EntityClient.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms) +82
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) +102
System.Data.EntityClient.EntityConnection..ctor(String connectionString) +43
System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection) +78
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +32
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +127
System.Data.Entity.Internal.LazyInternalConnection.get_ProviderName() +13
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +346
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +18
System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +52
EN

回答 2

Stack Overflow用户

发布于 2014-07-25 00:55:28

由于使用了EntityClient,您似乎将实体框架与.edmx模型结合使用

EntityClient使用自己的格式嵌入实际的SqlClient连接字符串。

格式如下所示:

代码语言:javascript
复制
<connectionStrings>
    <add name="AdventureWorksEntities"
        connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
                          provider=System.Data.SqlClient;
                          provider connection string='Data Source=localhost;Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;multipleactiveresultsets=true'"
        providerName="System.Data.EntityClient" />
</connectionStrings>

因此,在您的情况下,您可以尝试如下所示

代码语言:javascript
复制
<connectionStrings>
    <add name="Entities"
        connectionString="metadata=<Path-to-your-CSDL>.csdl|<Path-to-your-SSDL>.ssdl|<Path-to-your-MSL>.msl;
                          provider=System.Data.SqlClient;
                          provider connection string='workstation id=ICookDB.mssql.somee.com;packet size=4096;user id=***;pwd=***;data source=ICookDB.mssql.somee.com;persist security info=False;initial catalog=ICookDB'"
        providerName="System.Data.EntityClient" />
</connectionStrings>

确保将<Path-to-your-SSDL><Path-to-your-MSL><Path-to-your-CSDL>替换到正确的位置。

您可以在此处获取有关如何创建正确连接字符串的更多信息:EntityConnection.ConnectionString Property

票数 1
EN

Stack Overflow用户

发布于 2014-07-25 09:52:13

由于首先使用的是Database,因此必须传递实体连接字符串。下面将从标准SQL连接字符串构建实体连接字符串:

代码语言:javascript
复制
public static string BuildEntityConnectionString(string connectionString, 
  Type contextType)
{
    string result = string.Empty;

    string prefix = contextType.Namespace
      .Replace(contextType.Assembly.GetName().Name, 
      "");

    if (prefix.Length > 0
        && prefix.StartsWith("."))
    {
        prefix = prefix.Substring(1, prefix.Length - 1);
    }

    if (prefix.Length > 1
        && !prefix.EndsWith("."))
    {
        prefix += ".";
    }

    EntityConnectionStringBuilder csBuilder = 
      new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = connectionString;
    csBuilder.Metadata = string.Format("res://{0}/{1}.csdl|"
                                        + "res://{0}/{1}.ssdl|"
                                        + "res://{0}/{1}.msl"
                                        , ContextType.Assembly.FullName
                                        , prefix + ContextType.Name);

    result =  csBuilder.ToString();

    return result;
}

然后,当您创建上下文时:

代码语言:javascript
复制
var connectionString = // however you get your connection string;
if (connectionString.IndexOf("metadata", StringComparison.OrdinalIgnoreCase) 
  == -1)
{
  connectionString = BuildEntityConnectionString(connectionString
    typeof(MyDbContext));
}

var myContext = new MyDbContext(connectionString);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24936625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档