2012-04-12 12 views
1

私はProfileBaseたconnectionStringを変更するために使用する次のコードを、持っている:すべてのconnectionStringFieldの第一は、常にnullとして戻ってくる変更ProfileBaseのConnectionString動的

ProfileBase profile = ProfileBase.Create(username); 

string _connectionString = (_DataModel.Connection as System.Data.EntityClient.EntityConnection).StoreConnection.ConnectionString; 

FieldInfo connectionStringField = profile.Providers["MySqlProfileProvider"].GetType().BaseType.GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
connectionStringField.SetValue(profile.Providers["MySqlProfileProvider"], _connectionString); 

profile["FirstName"] = firstName; 
profile["Surname"] = surname; 

profile.Save(); 

、しかし私はprofile.Providersが含まれていないことがわかりますがMySqlProfileProvider。これは私のWeb.Config内に指定されています

<profile defaultProvider="MySqlProfileProvider"> 
    <providers> 
    <clear/> 
    <add name="MySqlProfileProvider" connectionStringName="MyApp" applicationName="MyApp" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
    </providers> 
    <properties> 
    <add allowAnonymous="false" defaultValue="" name="FirstName" readOnly="false" serializeAs="String" type="System.String"/> 
    <add allowAnonymous="false" defaultValue="" name="Surname" readOnly="false" serializeAs="String" type="System.String"/> 
    </properties> 
</profile> 

私の質問はどのようにconnectionStringFieldが来るヌルとして戻って来ているのですか?これは、通常MembershipProviderInitializeメソッドをオーバーライドしてカスタムの場合のように接続文字列を変更できないということですか?あなたは1あまりにも多くのbasetypesを下った

+0

ASP.NETのWebサイトまたはプロジェクトテンプレート? – IrishChieftain

+0

@IrishChieftain ASP.NETプロジェクト(MVC with w/EF)。 – fuzz

+0

FirstNameとSurnameのプロパティは戻っていますか? – IrishChieftain

答えて

2

.Providers["MySqlProfileProvider"].GetType()**.BaseType**.GetField 
.Providers["MySqlProfileProvider"].GetType().GetField 

を次のコードは動作するはずです:

string _connectionString = (_DataModel.Connection as System.Data.EntityClient.EntityConnection).StoreConnection.ConnectionString; 
Type type = profile.Providers["MySqlProfileProvider"].GetType(); 
FieldInfo connectionStringField = type.GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); 
connectionStringField.SetValue(profile.Providers["MySqlProfileProvider"], _connectionString); 
+0

これは完全にうまくいくようですが、感謝の仲間です。 – fuzz

関連する問題