2017-04-07 11 views
1

私は、エンティティフレームワークのコードfirst.nowを使用しているユーザーに対して小規模なcrud操作を作成しています。ストアプロシージャを使用しているdeleteユーザーが必要なので、EF.soでストアプロシージャを使用する方法については、しかし、私はこのコードを書いて、OnModelCreating()をクラスに入れ、ログイン時にこのようなエラーが発生します。 '無効なオブジェクト名' dbo.ApplicationUsers '。私はこのメソッドのログインは非常にうまく動作するとコメントしていますが、このコードのエラーを取り除きます。無効なオブジェクト名 'dbo.ApplicationUsers'。?

これは私のクラスである:

using System.Security.Claims; 
    using System.Threading.Tasks; 
    using Microsoft.AspNet.Identity; 
    using Microsoft.AspNet.Identity.EntityFramework; 
    using Microsoft.AspNet.Identity.Owin; 
    using System.Data.Entity; 
    using System.Data.Entity.Core.Objects; 
    using System.Data.Entity.Infrastructure; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations.Schema; 

    namespace abc.Models 
    { 
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.  
public class ApplicationUser : IdentityUser 
{ 
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager, string authenticationType) 
    { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var userIdentity = await manager.CreateIdentityAsync(this, authenticationType); 
     // Add custom user claims here 
     return userIdentity; 
    }  
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

    public virtual DbSet<Users> Users { get; set; } 


    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 

    public virtual ObjectResult<List<Users>> GetUserInfo() 
    { 
     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<List<Users>>("GetUserInfo"); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) // this method wroite after getting error 
    { 
     modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId); 
     modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id); 
     modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); 

     modelBuilder.Entity<Users>() 
      .MapToStoredProcedures(s => s.Delete(u => u.HasName("DeleteUserById", "dbo") 
              .Parameter(b => b.id, "userid")) 
      ); 
    } 

} 
} 

このユーザーのクラスです:

[Table("Users")] 
public class Users 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)] 
    public long id { get; set; } 

    public string firstname { get; set; } 

    public string lastname { get; set; }  

    public string contactnumber { get; set; } 

    public DateTime datetime { get; set; } 

} 

これは、いずれかがそれを行うと、それをこのエラーを修正することができます方法を知っている私のクラスです。

+0

になります最初の3行を削除し、そう

base.OnModelCreating(modelBuilder); 

を追加し、ここで

protected override void OnModelCreating(DbModelBuilder modelBuilder) // this method wroite after getting error { modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId); modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id); modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); modelBuilder.Entity<Users>() .MapToStoredProcedures(s => s.Delete(u => u.HasName("DeleteUserById", "dbo") .Parameter(b => b.id, "userid")) ); } 

ありますと 'ユーザー'? 'IdentityDbContext'は' DbSet 'を既に定義しています。代わりにそれを使用してください。 – dbraillon

+0

あなたは何を言いたいのですかidk私はEFとidenetityのために新規です – coderwill

+0

あなたはmodelBuilder.Entity ()ここをクリックしてください。 – coderwill

答えて

3

問題は、両方 `ApplicationUser`を持っているために何らかの理由がある、それは

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<Users>() 
     .MapToStoredProcedures(s => s.Delete(u => u.HasName("DeleteUserById", "dbo") 
             .Parameter(b => b.id, "userid")) 
     ); 
} 
+0

こんにちはdbraillonログインfacebook-と-グーグル-のOAuth2-と-openidのサインオン - -with使用すると、1人の助けに私を喜ばできますか? – coderwill

関連する問題