2015-11-30 5 views
9

मेरे पास EF7 का उपयोग कर ASP.NET5 MVC एप्लिकेशन है। यह अब तक सभी ठीक काम करता है और मैं डेटाबेस में माइग्रेशन जोड़ने और डेटा को जारी रखने में सक्षम हूं। से परिभाषित करने कीइकाई प्रकार 'Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin <string>' को परिभाषित करने की कुंजी की आवश्यकता है

इकाई प्रकार 'Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin' एक महत्वपूर्ण आवश्यकता है: अब मेरी डेटा परत परियोजना के लिए पहचान जोड़ने के बाद मैं जब एक नया माइग्रेशन जोड़ने की कोशिश कर यह त्रुटि प्राप्त

मेरे संदर्भ IdentityDbContext से प्राप्त होता है:

public class ASSWebApiContext : IdentityDbContext<AppUser> 

AppUser वर्ग:

using Microsoft.AspNet.Identity.EntityFramework; 
using System; 

namespace ASS.DomainDataModel.Models 
{ 
    public class AppUser : IdentityUser 
    { 
     public string AppUserId { get; set; } 
     public DateTime FirstFlight { get; set; } 
    } 
} 

project.json

{ 
    "version": "1.0.0-*", 
    "description": "ASS.DomainDataModel Class Library", 
    "authors": [ "xxxx" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 

    "frameworks": { 
    "dnx451": { 
     "dependencies": { 
     } 
    }, 
    "dnxcore50": { 
     "dependencies": { 
     } 
    } 
    }, 

    "dependencies": { 
    "ASS.DomainClasses": "1.0.0-*", 
    "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", 
    "EntityFramework.Core": "7.0.0-rc1-final", 
    "EntityFramework.Commands": "7.0.0-rc1-final", 
    "EntityFramework.Relational": "7.0.0-rc1-final", 
    "System.Linq.Expressions": "4.0.11-beta-23516", 
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", 
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final" 
    }, 

    "commands": { 
    "ef": "EntityFramework.Commands" 
    } 
} 

सभी मैं यहाँ किया है प्रासंगिक नए पैकेज लोड करने के लिए है: "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-RC1 फाइनल", AppUser क्लास जोड़ा - कुछ और नहीं। मेरे पास बीटा -8 का उपयोग करके एक ही प्रोजेक्ट था जो सटीक उसी पैटर्न का उपयोग करता था जहां यह बिना किसी समस्या के काम करता था। क्या बीटा -8 और आरसी -1 के बीच कोई प्रासंगिक बदलाव है?

धन्यवाद!

नीचे ASSWebApiContext का हिस्सा है। डीबीसेट के अधिकांश इकाइयों के लिए एक मॉडलबिल्डर। एंटीटी है। तो फ़ाइल काफी देर के लिए पर चला जाता है ...

using Microsoft.Data.Entity; 
using ASS.DomainClasses.Entities; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.PlatformAbstractions; 
using System.Linq; 
using ASS.DomainClasses.Interfaces; 
using System; 
using Microsoft.AspNet.Identity.EntityFramework; 

namespace ASS.DomainDataModel.Models 
{ 
    public class ASSWebApiContext : IdentityDbContext<AppUser> 
    { 
     public IConfigurationBuilder Config { get; set; } 
     public IConfigurationRoot _Configuration { get; private set; } 

     public ASSWebApiContext(IApplicationEnvironment appEnv) 
     { 
      Database.EnsureCreated(); 

      Config = new ConfigurationBuilder() 
       .SetBasePath(appEnv.ApplicationBasePath) 
       .AddJsonFile("config.json"); 

      _Configuration = Config.Build(); 

     } 

     public DbSet<Address> Addresses { get; set; } 
     public DbSet<AddressType> AddressTypes { get; set; } 
     public DbSet<Aircraft> Aircrafts { get; set; } 
     public DbSet<AircraftModel> AircraftModels { get; set; } 
     public DbSet<AircraftOwner> AircraftOwners { get; set; } 
     public DbSet<AircraftOwnerType> AircraftOwnerTypes { get; set; } 
     public DbSet<Country> Countries { get; set; } 
     public DbSet<GPEncodingType> GPEncodingTypes { get; set; } 
     public DbSet<LocationPoint> LocationPoints { get; set; } 
     public DbSet<Manufacturer> Manufacturer { get; set; } 
     public DbSet<Pilot> Pilots { get; set; } 
     public DbSet<ServiceProvider> ServiceProviders { get; set; } 
     public DbSet<State> States { get; set; } 
     public DbSet<Trip> Trips { get; set; } 
     public DbSet<Stop> Stops { get; set; } 
     public DbSet<Track> Tracks { get; set; } 


     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 


      modelBuilder.Entity<AddressType>(
       e => 
       { 
        e.Property(n => n.AddressTypeId).IsRequired().UseSqlServerIdentityColumn(); 
        e.Property(n => n.Name).IsRequired().HasMaxLength(15); 
        e.Ignore(n => n.IsDirty); 
       }); 

      modelBuilder.Entity<Address>(
       e => 
       { 
        e.Property(n => n.AddressId).IsRequired().UseSqlServerIdentityColumn(); 
        e.Property(n => n.AddressTypeId).IsRequired(); 
        e.Property(i => i.CountryId).HasMaxLength(2); 
        e.Property(i => i.AddrLine1).HasMaxLength(256); 
        e.Property(i => i.AddrLine2).HasMaxLength(256); 
        e.Property(i => i.AddrLine3).HasMaxLength(256); 
        e.Property(i => i.Postcode).HasMaxLength(50); 
        e.Ignore(n => n.IsDirty); 
       }); 
... 
+0

क्या हम पहचान यूज़र लॉजिइन की परिभाषा देख सकते हैं? – Luke

+0

यह एक सिस्टम प्रकार है ...? –

+0

हां, लेकिन आपने इसे कहीं कहीं इस्तेमाल किया होगा या उससे विरासत में होना चाहिए? आपने 'IdentityUser' पोस्ट किया है, लेकिन जहां आपने 'IdentityUserLogin' – Luke

उत्तर

21

असल पहचान तालिकाओं की चाबी IdentityDbContext की OnModelCreating विधि में किया जाता है और यदि इस विधि कहा जाता है नहीं है, तो आपको त्रुटि है कि आप मिल गया हो रही खत्म हो जाएगा । यदि आप IdentityDbContext से प्राप्त करते हैं तो इस विधि को नहीं कहा जाता है और आपने अपनी कोड में OnModelCreating की अपनी परिभाषा प्रदान की है। इस सेटअप के साथ आपको base.OnModelCreating कथन का उपयोग करके की OnModelCreating विधि को स्पष्ट रूप से कॉल करना होगा। This answer यहां पोस्ट किए गए विकल्प पर भी चर्चा करता है

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