2012-08-22 13 views
13

वीएस -2010 में मेरा एमएसटीएस्ट परीक्षण ठीक है।सीएसला और इकाई ढांचे के साथ विजुअल स्टूडियो 2012 परीक्षण

जब VS2012 में चल मैं एक त्रुटि हो रही है। परीक्षण एक कस्टम बिजनेस प्रिंसिपल के साथ Csla.AplicationContext.User सेट करता है। जब EntityFramework को एक नया ऑब्जेक्ट कॉन्टेक्स्ट प्रदान करने के लिए कहा जाता है तो मुझे एक सीरियलाइजेशन अपवाद प्राप्त होता है जिसमें कहा गया है कि मेरा कस्टम बिजनेस प्रिंसिपल प्रकार नहीं मिला है।

सभी परीक्षण है कि जब VS2012 का परीक्षण धावक या Resharper7 के परीक्षण धावक के माध्यम से चल का उपयोग EntityFramework असफल। मैंने एनसीआरंच के टेस्ट रनर की कोशिश की है और वे सभी पास हैं।

मैं इस समस्या को कैसे हल कर सकता हूं?

+2

मैं अपने असली मुद्दा पाया कम होगा। VS2012 प्रतिबिंब के माध्यम से एक अलग ऐपडोमेन और हमारे डेटा एक्सेस लेयर लोड में परीक्षण चलाता है। अभी भी यह सुनिश्चित नहीं है कि ईएफ को प्रिंसिपल के ज्ञान की आवश्यकता क्यों है, लेकिन हमारा समाधान ईएफ तक पहुंचने से पहले हमारे प्रिंसिपल को जेनेरिक प्रिंसिपल को रीसेट करना था, फिर मूल को वापस रखना। मैं अभी भी इस विचार से कुश्ती कर रहा हूं कि शायद एक आईओसी कंटेनर इस मुद्दे को कम करेगा। –

+0

क्या आप अपने निष्कर्षों को उत्तर के रूप में जोड़ सकते हैं और यदि समस्या हल हो जाती है तो उन्हें स्वीकार किए जाते हैं? –

उत्तर

2

मैं अपने असली मुद्दा मिल गया। VS2012 प्रतिबिंब के माध्यम से एक अलग ऐपडोमेन और हमारे डेटा एक्सेस लेयर लोड में परीक्षण चलाता है। अभी भी यह सुनिश्चित नहीं है कि ईएफ को प्रिंसिपल के ज्ञान की आवश्यकता क्यों है, लेकिन हमारा समाधान ईएफ तक पहुंचने से पहले हमारे प्रिंसिपल को जेनेरिक प्रिंसिपल को रीसेट करना था, फिर मूल को वापस रखना। मैं अभी भी विचार के साथ कुश्ती रहा हूँ कि शायद एक आईओसी कंटेनर इस मुद्दे

+0

असल में मैं एफई अपने प्रमुख के बारे में विशेष रूप से जानना चाहता है नहीं लगता है, लेकिन यह इस पर गौर कर सकते हैं, और जब यह दलदल को यह नया करने के लिए मूल appdomain से वस्तु का प्रयास करता है, यह विफल रहता है (यह नहीं मिल सकता है के रूप में असेंबली आपके प्रिंसिपल में परिभाषित किया गया है। – Andy

0

तुम भी .net नोट करना चाहिए 4.5 दावों प्रिंसिपल दृष्टिकोण। इम लक्ष्य .net4.5 परीक्षण WindowsIdentity.GetCurrent().Name;
और Thread.CurrentPrincipal

के बीच अंतर मैं इस के तहत की तरह एक छोटे से दिनचर्या का उपयोग .net4.5 को लक्षित VS2012 पर EF5.0 का उपयोग प्रमाणन रूपों। तो विंडोज ऑथ और फॉर्म ऑथ एक साथ खेल सकते हैं।

नहीं

ठीक उसी स्थिति है, लेकिन यह महत्वपूर्ण अंतर है जो जब कुछ भी चलेगा अनदेखी की है पर प्रकाश डाला है।
एक त्वरित पढ़ने लायक ... http://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal.current

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Security.Claims; 
using System.Security.Principal; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using System.Web; 


namespace BosIdentityManager 
{ 
public class BosPrincipal 
{ 
    /// <summary> 
    /// The current principal is set during FORMS authentication. If WINDOWS auth mode is in use, Windows sets it. 
    /// </summary> 
    /// <returns> The Name from Thread.CurrentPrincipal.Identity.Name unless alternate delegate is configured</returns> 
    public static string GetCurrentUserName() 
    { 
    // http://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal.current 
    // with forms auth and windows integrated,ClaimsPrincipal.Current will be set. 

     var prin = ClaimsPrincipal.Current; //normally this reverts to Thread.CurrentPrincipal, but can chnage ! 
     return prin.Identity.Name; 

    } 

    public static string GetCurrentWindowsUserName() 
    { 
     return WindowsIdentity.GetCurrent().Name; 
    } 

    public static void SetPrincipal(BosMasterModel.Membership memb) 
    { 
     var claims = new List<Claim>(){ new Claim(ClaimTypes.Name, memb.SystemUser.UserName), 
             new Claim(ClaimTypes.NameIdentifier,memb.UserId.ToString()), 
             new Claim(ClaimTypes.Role, "SystemUser") }; 

     var ClaimsId = new ClaimsIdentity(claims,"Forms"); 

     var prin = new ClaimsPrincipal(ClaimsId); 
     Thread.CurrentPrincipal = prin; 

    } 
} 
} 
संबंधित मुद्दे