2011-01-23 24 views
19

मेरे पास ईएफ कोड पहले के आधार पर मॉडल हैं और मैं उन्हें डिफ़ॉल्ट सदस्यता प्रदाता के साथ उपयोग करना चाहता हूं, लेकिन मुझे नहीं पता कि मॉडल को सही तरीके से कैसे लिखना है, इसलिए यह मेरे सभी डेटा को टेबल को दोबारा शुरू करने पर मिटा नहीं देगा मॉडल में किए गए परिवर्तन।ईएफ कोड के साथ सदस्यता प्रदाता का उपयोग कैसे करें?

+0

कृपया विस्तार करें: क्या आप .NET के साथ स्थापित SQL स्क्रिप्ट का उपयोग करने के बजाय पहले कोड के माध्यम से सदस्यता डेटाबेस बनाने का प्रयास कर रहे हैं? – Richard

+0

डीबी aspnet_regsql के साथ जेनरेट किया गया है, लेकिन मुझे नहीं पता कि ईएफ कोड पहली सुविधाओं के साथ इसमें कैसे जुड़ें, जैसे कि जब मैं मॉडल/क्लास बनाता हूं, ईएफ तालिका उत्पन्न करता है। अब यह aspnet_regsql द्वारा बनाई गई सभी तालिकाओं को मिटा देता है। – Santas

उत्तर

2

वर्तमान में (ईएफ 4.1 सीटीपी) ईएफ कोड पहले उस विकल्प में नहीं है। यदि आपने मॉडल में बदलाव किए हैं तो यह हमेशा एक टेबल छोड़ देता है।

अद्यतन:

एफई 4.1 आरटीएम आप एक कस्टम डेटाबेस प्रारंभकर्ता बना सकते हैं और डाटाबेस वस्तुओं और डेटा बोने के निर्माण निर्दिष्ट करने के लिए अनुमति देता है।

9

इस परियोजना पर एक नज़र डालें

http://codefirstmembership.codeplex.com/

यह उपयोगकर्ताओं और भूमिकाओं के लिए इकाई वर्गों, साथ ही है एक roleprovider और सदस्यताप्रदाता कार्यान्वयन के रूप में। यदि आप अपने डेटाकॉन्टेक्स्ट क्लास में उपयोगकर्ताओं और भूमिकाओं को शामिल करते हैं तो टेबल आपके डेटाबेस में बनाए जाएंगे।

+0

इसे लिखने के समय मैं पुष्टि कर सकता हूं कि यह अभी भी एक अच्छा समाधान है लेकिन कोडप्लेक्स पर ज्यादातर चीजों की तरह यह वास्तव में बुरी तरह से दस्तावेज है – JustAnotherDeveloper

1

मेरी लाइब्रेरी भी है जो मूल रूप से आपको परिभाषित करने की अनुमति देती है कि लगभग सभी चीजों को कैसे कॉन्फ़िगर किया जाना चाहिए: कुंजी प्रकार, जहां आपका संदर्भ ऑब्जेक्ट है, और जहां आपका उपयोगकर्ता/भूमिका संस्थाएं स्थित हैं। सार आधार कक्षाओं या इंटरफेस का उपयोग करके विस्तार योग्य। रिपोजिटरी पैटर्न/काम/आईओसी कंटेनर की इकाई के साथ बॉक्स से काफी अच्छी तरह से काम करता है।

स्रोत: https://github.com/holyprin/holyprin.web.security

NuGet: https://nuget.org/packages/Holyprin.Web.Security

7

आपका प्रश्न के दो भाग हैं।

  1. ईएफ कोड के साथ एएसपीनेट सदस्यता API का उपयोग कैसे करें?
  2. मॉडल बदलते समय मौजूदा डेटा को कैसे संरक्षित किया जाए?

मॉडल परिवर्तन के दौरान मौजूदा डेटा को संरक्षित करने के लिए, जहां तक ​​EF 4.0/asp.net mvc 3 के साथ, डेटाबेस माइग्रेशन अभी तक समर्थित नहीं हैं। आपको एएसपीएनटी एमवीसी 4.0/ईएफ 4.3 में स्थानांतरित करना होगा जहां डेटाबेस माइग्रेशन समर्थित हैं या समान विकल्पों का उपयोग करते हैं, लेकिन यह अभी भी बीटा रिलीज है।

asp.net mvc 4.0 database migration in scott gu's blog

अब कैसे पहले एफई कोड के साथ asp.net सदस्यता प्रदाता का उपयोग करने पर बात करने के लिए आ रहा है। कुछ चुनौतियां हैं:

  1. हम asp.net सदस्यता प्रदाता तालिकाओं में शामिल नहीं हो सकते/नहीं करना चाहिए। इसकी अनुशंसा नहीं की जाती है, इसलिए मेरा सुझाव एएसपीनेट सदस्यता प्रदाता कक्षाओं के लिए "एडाप्टर क्लास" बनाना होगा।पूर्व के लिए:

    public class UserAdapter 
    { 
    // all user related attributes. Not stored in membership schema, but your schema 
    
        public string UserProxyName; 
    
        // some attributes stored in membership schema 
        [NotMapped] 
        public string Email { 
         get 
         { 
           Membership.GetUser(UserProxyName).Email; 
         }     
        }   
    
        // some attributes stored in membership schema and not in your schema 
        [NotMapped] 
        public string[] UserRoles 
        { 
        get 
        { 
         return Roles.GetRolesForUser(UserProxyName); 
        }   
        } 
    
    } 
    

    अब जानकारी को अद्यतन करने के लिए, आप कुछ कार्यों मॉडल अपने आप में लिख सकते हैं, हालांकि मैं भंडार डिजाइन पैटर्न के साथ एक UserRepository उपयोगकर्ता CRUD संचालन को संभालने के लिए बनाने का सुझाव देते हैं।

  2. दूसरी चुनौती यह है कि पहले रन पर डेटाबेस कैसे बनाया जाए। चूंकि बीजिंग एक मुद्दा बन जाता है, यदि आप उपयोगकर्ता की जानकारी बीज करना चाहते हैं तो अलग-अलग चलाना aspnet_regsql बीजिंग होने से पहले सदस्यता स्कीमा की अपेक्षा की जाती है।

asp.net membership and EF

0

मेरी DbContext.cs में दाखिल मैं एक बीज समारोह मैं कहाँ ApplicationServices.InstallServices() फोन ASP.NET स्थापित करने के लिए है: मैं कुछ ठीक ट्यूनिंग यह मेरे लिए काम किया, यह अच्छा लेख भर में आया था मेरे डेटाबेस में सदस्यता। अब हर बार जब मेरा प्रारंभकर्ता डेटाबेस छोड़ देता है तो यह फिर से एएसपी.NET सदस्यता स्कीमा को दोबारा शुरू करता है।

public class PanelInitializer : DropCreateDatabaseAlways<PanelContext> 
{ 
    protected override void Seed(PanelContext context) 
    { 
     //Install ASP.NET Membership 
     ApplicationServices.InstallServices(SqlFeatures.Membership | SqlFeatures.RoleManager); 

     new List<Panel> 
      { 

ApplicationServices वर्ग

using System.Configuration; 
using System.Data.SqlClient; 
using System.Web.Management; 

namespace Lansw.Panels.DataAccess.Contexts 
{ 
    public class ApplicationServices 
    { 
     readonly static string DefaultConnectionString = ConfigurationManager.AppSettings["DefaultConnectionString"]; 
     readonly static string ConnectionString = ConfigurationManager.ConnectionStrings[DefaultConnectionString].ConnectionString; 
     readonly static SqlConnectionStringBuilder MyBuilder = new SqlConnectionStringBuilder(ConnectionString); 

     public static void InstallServices(SqlFeatures sqlFeatures) 
     { 
      SqlServices.Install(MyBuilder.InitialCatalog, sqlFeatures, ConnectionString); 
     } 

     public static void UninstallServices(SqlFeatures sqlFeatures) 
     { 
      SqlServices.Uninstall(MyBuilder.InitialCatalog, sqlFeatures, ConnectionString); 
     } 
    } 
} 

@ImarSpaanjaarshttp://imar.spaanjaars.com/563/using-entity-framework-code-first-and-aspnet-membership-together के लिए धन्यवाद।

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