আমি সত্ত্বা ফ্রেমওয়ার্ক কোড প্রথম এবং এমভিসি ৫ এর সাথে কাজ করছি Ind আমি যখন ব্যক্তিগত ব্যবহারকারী অ্যাকাউন্ট প্রমাণীকরণের সাথে আমার অ্যাপ্লিকেশন তৈরি করি তখন আমাকে একটি অ্যাকাউন্ট নিয়ামক দেওয়া হয়েছিল এবং তার সাথে ইন্ডিব ব্যবহারকারী অ্যাকাউন্টগুলির প্রমাণীকরণ পাওয়ার জন্য প্রয়োজনীয় সমস্ত শ্রেণি এবং কোড দেওয়া হয়েছিল was ।
ইতিমধ্যে বিদ্যমান কোডগুলির মধ্যে এটি ছিল:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DXContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
তবে আমি এগিয়ে গিয়ে কোডটি ব্যবহার করে প্রথমে নিজস্ব প্রসঙ্গ তৈরি করেছি, সুতরাং আমার এখন নিম্নলিখিতগুলিও রয়েছে:
public class DXContext : DbContext
{
public DXContext() : base("DXContext")
{
}
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<IdentityRole> Roles { get; set; }
public DbSet<Artist> Artists { get; set; }
public DbSet<Paintings> Paintings { get; set; }
}
অবশেষে আমার বিকাশের সাথে কাজ করার জন্য কিছু ডেটা যুক্ত করার জন্য আমার কাছে নীচের বীজ পদ্ধতি রয়েছে:
protected override void Seed(DXContext context)
{
try
{
if (!context.Roles.Any(r => r.Name == "Admin"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store);
var role = new IdentityRole { Name = "Admin" };
manager.Create(role);
}
context.SaveChanges();
if (!context.Users.Any(u => u.UserName == "James"))
{
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store);
var user = new ApplicationUser { UserName = "James" };
manager.Create(user, "ChangeAsap1@");
manager.AddToRole(user.Id, "Admin");
}
context.SaveChanges();
string userId = "";
userId = context.Users.FirstOrDefault().Id;
var artists = new List<Artist>
{
new Artist { FName = "Salvador", LName = "Dali", ImgURL = "http://i62.tinypic.com/ss8txxn.jpg", UrlFriendly = "salvador-dali", Verified = true, ApplicationUserId = userId },
};
artists.ForEach(a => context.Artists.Add(a));
context.SaveChanges();
var paintings = new List<Painting>
{
new Painting { Title = "The Persistence of Memory", ImgUrl = "http://i62.tinypic.com/xx8tssn.jpg", ArtistId = 1, Verified = true, ApplicationUserId = userId }
};
paintings.ForEach(p => context.Paintings.Add(p));
context.SaveChanges();
}
catch (DbEntityValidationException ex)
{
foreach (var validationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
}
}
আমার সমাধানটি সূক্ষ্মভাবে তৈরি করে, তবে যখন আমি চেষ্টা করি এবং এমন একটি নিয়ামককে অ্যাক্সেস করি যেখানে ডাটাবেসে অ্যাক্সেসের প্রয়োজন হয় আমি নিম্নলিখিত ত্রুটিটি পাই:
DX.DOMAIN.Context.IdentityUserLogin:: EntityType 'IdentityUserLogin' এর কোনও কী সংজ্ঞায়িত হয়নি। এই সত্তা টাইপের জন্য কীটি সংজ্ঞায়িত করুন।
DX.DOMAIN.Context.IdentityUserRole:: সত্তা টাইপ 'আইডেন্টিটি ইউজাররোল' এর কোনও কী সংজ্ঞায়িত হয়নি। এই সত্তা টাইপের জন্য কীটি সংজ্ঞায়িত করুন।
আমি কি ভুল করছি? আমার দুটি প্রসঙ্গ আছে বলেই কি?
হালনাগাদ
অগস্টোর জবাব পড়ার পরে আমি অপশন 3 নিয়ে গেলাম । আমার ডিএক্স কনটেক্সট ক্লাসটি এখন দেখতে কেমন তা এখানে:
public class DXContext : DbContext
{
public DXContext() : base("DXContext")
{
// remove default initializer
Database.SetInitializer<DXContext>(null);
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<Artist> Artists { get; set; }
public DbSet<Painting> Paintings { get; set; }
public static DXContext Create()
{
return new DXContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
}
public DbQuery<T> Query<T>() where T : class
{
return Set<T>().AsNoTracking();
}
}
আমি একটি User.cs
এবং একটি Role.cs
ক্লাসও যুক্ত করেছি, তারা দেখতে এইরকম:
public class User
{
public int Id { get; set; }
public string FName { get; set; }
public string LName { get; set; }
}
public class Role
{
public int Id { set; get; }
public string Name { set; get; }
}
আমি নিশ্চিত ছিলাম না যে আমার ব্যবহারকারীর একটি পাসওয়ার্ডের সম্পত্তি প্রয়োজন কিনা, যেহেতু ডিফল্ট অ্যাপ্লিকেশন ব্যবহারকারীটিতে এবং অন্যান্য ক্ষেত্রগুলির একটি গুচ্ছ রয়েছে!
যাইহোক, উপরের পরিবর্তনটি ঠিকঠাক করে তোলে, তবে অ্যাপ্লিকেশনটি চালানোর পরে আবার এই ত্রুটিটি পেয়েছি:
অবৈধ কলামের নাম ইউজারআইডি
UserId
আমার উপর একটি পূর্ণসংখ্যা সম্পত্তি Artist.cs