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

अब मेरा प्रश्न: क्या मैं डीबीकॉन्टेक्स्ट क्लास में "ओवरराइड ऑनमोडेल क्रिएटिंग" विधि का उपयोग कर सकता हूं या क्या यह केवल कोड प्रथम दृष्टिकोण के लिए प्रयोग योग्य है

2
Hershy D 7 मई 2019, 03:20

1 उत्तर

सबसे बढ़िया उत्तर

जी हां बिल्कुल कर सकते हैं। आखिरकार, डीबीकॉन्टेक्स्ट आपके डेटा का ऑब्जेक्ट-ओरिएंटेड-मॉडल है। यदि एक जनरेटर ने आपके लिए इसे मचा दिया है या यदि आपने इसे मैन्युअल रूप से तैयार किया है, तो कोई चिंता नहीं है। मैं खुद उस रास्ते से नीचे जा रहा हूं। डेटाबेस पहले से मौजूद है और एक .sqlproj प्रोजेक्ट के माध्यम से बनाए रखा जाता है और जब यह पहले कोड के रूप में शुरू हुआ, तो मैंने लगभग आधे रास्ते पर स्विच किया।

एक व्यावहारिक उदाहरण के रूप में। मैं अपनी संस्थाओं को कॉन्फ़िगर करने के लिए OnModelCreating का उपयोग कर रहा हूं:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        //extracted m:n mapping for demonstration puporses
        builder.Entity<AppUserRole>(userRole =>
        {
            userRole.HasKey(ur => new { ur.UserId, ur.RoleId });
            userRole.HasOne(ur => ur.Role)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();

            userRole.HasOne(ur => ur.User)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();
        });

        builder.ApplyConfiguration(new AppUserConfiguration());
        builder.ApplyConfiguration(new MapConfigConfiguration());
        builder.ApplyConfiguration(new MapWidgetConfiguration());
        builder.ApplyConfiguration(new WidgetConfiguration());
        builder.ApplyConfiguration(new LayoutMenuConfiguration());
        builder.ApplyConfiguration(new ImageConfiguration());
        builder.ApplyConfiguration(new FrontPageContentConfiguration());
    }
}

आरंभ करने के लिए, आप Nuget कंसोल का उपयोग करके मौजूदा डेटाबेस को बाहर निकाल सकते हैं:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Foo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

और फिर जरूरत पड़ने पर इसे अपनी जरूरत के हिसाब से ट्विक करें। इसलिए यदि आपके पास json एक nvarchar फ़ील्ड में संग्रहीत है, तो इसे स्वचालित रूप से एक ठोस प्रकार में मैप करने के लिए एक रूपांतरण जोड़ें:

public class LayerConfigurationConfiguration : IEntityTypeConfiguration<LayerConfiguration>
{
    public void Configure(EntityTypeBuilder<LayerConfiguration> builder)
    {
        builder.HasKey(lc => lc.Id);
        /* ... */
        builder.Property(lc => lc.LayerConfig).HasConversion(
            v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
            v => JsonConvert.DeserializeObject<LayerConfig>(v)
        );
    }
}

संदर्भ: https://docs.microsoft। com/en-us/ef/core/get-started/aspnetcore/मौजूदा-डीबी

2
Marco 7 मई 2019, 05:29