'অ্যাপ্লিকেশনডিবি কনটেক্সট' প্রসঙ্গে সমর্থনকারী মডেলটি ডেটাবেস তৈরি হওয়ার পরে পরিবর্তিত হয়েছে


86

প্রথমত, আমি এই ত্রুটি অন্য কোথাও দেখিনি এবং আমার ধারণা এটির প্রতিরূপ নয় তাই দয়া করে প্রথমে পুরো পরিস্থিতিটি পড়ুন।

সবকিছু ঠিকঠাক কাজ করছিল তখন আমি আমার মডেল শ্রেণির একটি আপডেট করার চেষ্টা করলাম ( অ্যাপ ক্লাস এবং আপডেটটি এখন মন্তব্য করা বাকি) যা আমি নীচে তালিকাভুক্ত করব; এবং বুম আমি এই কুরুচিপূর্ণ ত্রুটি ছিল।


'অ্যাপ্লিকেশনডিবি কনটেক্সট' প্রসঙ্গে সমর্থনকারী মডেলটি ডেটাবেস তৈরি হওয়ার পরে পরিবর্তিত হয়েছে। ডাটাবেস আপডেট করার জন্য কোড ফার্স্ট মাইগ্রেশন ব্যবহার করার কথা বিবেচনা করুন ( http://go.microsoft.com/fwlink/?LinkId=238269 )। System.Data.Entity.CreateDatabaseIfNotExists এ 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassfSystem.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization এ System.Data.Entity.Internal.InternalContext.PerformInitializationAction (ক্রিয়া কর্ম) () System.Data.Entity এ 1.b__e ()। International.LazyInternContext.b__4 (InternalContext c) এ System.Data.Entity.Intern.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action1 ক্রিয়াকলাপ) System.Data.Entity.Intern.LazyInternContext.InitializeDatedia () System.Cata.Intity.Intity.Intity.Intity.Intity.Intity.Intity.Intity.Intity.Intity.InType.Intity.InteteTInteteIttenteIttenteIttenteIttenteIttenteIttenteIttenteItternation.InternialTInteteIttenteItternation.InternialTInteTInteTInteTInteTInteTIntete.InternialCetete। সত্ত্বা টাইপ) System.Data.Entity.Intern.Linq.InternSet এ1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1. সিস্টেম.ডাটা.এন্টিটি.আইনফ্রাস্ট্রাকচার.ডিবিকিউয়ারি 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable1 উত্স, স্ট্রিং পাথ) এ স্ট্রিং পাথ) 1 source, Expressionমাইক্রোসফ্ট.এএসনেট.আইডেন্টিটিতে [টি, টিপ্রোপার্টি] (আইকুয়েরেবল 1 পাথ) অন্তর্ভুক্ত করুন। EntityFramework.UserStore 6.GetUserAggregateAsync(Expression1 ফিল্টার) Microsoft.AspNet.Identity.EntityFramework.UserStore এ 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManagerMicrosoft.AspNet.Identity.UserManager`2.d__12.MoveNext এ 2.FindByNameAsync (স্ট্রিং uSERNAME) () --- পূর্ববর্তী অবস্থান কোথা থেকে স্ট্যাক ট্রেস সমাপ্তি ব্যতিক্রমটি ছুঁড়ে দেওয়া হয়েছিল --- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotifications (Task Task) at ControlPanel.Web.Control2.Control2.Control2। : Jects প্রকল্পগুলি UL সম্পূর্ণ \ কন্ট্রোল প্যানেল \ কন্ট্রোলপ্যানেল.উইব \ কন্ট্রোলাররা \ অ্যাকাউন্টকন্ট্রোলার.সি: লাইন 56

প্রথমে আমি ভেবেছিলাম এটি মাইগ্রেশনের সমস্যা হতে পারে, তাই আমি সম্পূর্ণভাবে ডাটাবেসটি ফেলে দিয়েছি, মাইগ্রেশনগুলিকে পুনরায় সক্রিয় করেছি এবং একটি ইনগ্রেশন মাইগ্রেশন যুক্ত করেছি এবং ব্যবহার করে ডাটাবেস আপডেট করেছি

update-database -force -verbose

কোনও অভিযোগ ছাড়াই সবকিছু ঠিকঠাক হয়, তবে আমি যখনই আমার সাইটে লগ ইন করার চেষ্টা করি তখন আমি পূর্ববর্তী ত্রুটিটি পাই। আমি সমস্যার সমাধান করতে সক্ষম না হয়ে প্রায় দশবার মাইগ্রেশন কাজটি করেছি।

এখানে আমার ডোমেন ক্লাস (মডেল):

public class App
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int AppId { get; set; }
    //[Required]
    public virtual string FacebookId { get; set; }
    //[Required]
    public virtual string Secret { get; set; }      
    public virtual List<User> Users { get; set; }
    public virtual List<Post> Posts { get; set; }      
    //public virtual ApplicationUser Admin { get; set; }
}

public class Post
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int PostId { get; set; }
    public virtual string Content { get; set; }
    public virtual string Link { get; set; }
    public virtual string Image { get; set; }
    public virtual bool IsSpecial { get; set; }
    //[Required]
    public virtual App App { get; set; }
    //[Required]
    public virtual DateTime? PublishDate { get; set; }
}

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int UserId { get; set; }

    [MaxLength(500)]
    public virtual string FacebookId { get; set; }

    [MaxLength(500)]
    public virtual string Token { get; set; }

    //[Required]
    public virtual App App { get; set; }
}

আমার পরিচয় মডেলগুলি এখানে:

public class ApplicationUser : IdentityUser
{
    public virtual List<App> Apps { get; set; }
    public bool? IsPremium { get; set; }
    [DataType(DataType.Date)]
    public DateTime? LastPublishDateTime { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("dCon")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("Admins");
        modelBuilder.Entity<ApplicationUser>().ToTable("Admins");
        modelBuilder.Entity<IdentityUserRole>().ToTable("AdminRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("Logins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("Claims");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
    }
}

আপনি কি নিশ্চিত যে আপনি অন্য কোথাও এই সমস্যাটি দেখেন নি? এই লিঙ্কটি সম্পর্কে কি? stackoverflow.com/questions/3600175/...
AndreCruz

4
না, তারা আমি আপনাকে যে আশ্বাস দিতে পারি তা একই নয়, আমি সেখানে প্রদত্ত সমাধানের চেষ্টা করেছি যেখানে কোনও ফলাফল নেই, তাদের ত্রুটি বলে: হয় ম্যানুয়ালি ডাটাবেসটি মুছুন / আপডেট করুন, অন্যদিকে আমার বলেছেন: কোড ফার্স্ট মাইগ্রেশন ব্যবহারের বিষয়ে বিবেচনা করুন ডাটাবেস আপডেট করতে
a7madx7

উত্তর:


141

কেবলমাত্র যদি অন্য কেউ আমার উপরের মতো একটি ডেটাবেস প্রথম বাস্তবায়ন করে যাচ্ছিল তবে সে এতে হোঁচট খায়।

ApplicationUserক্লাস প্রসারিত করে , একটি নতুন ক্ষেত্র যুক্ত করে একটি পরিবর্তন করেছিAspNetUsers টেবিলে এবং তারপরে শুরুতে এই ত্রুটি ছিল।

আমি __MigrationHistoryসারণীতে তৈরি রেকর্ডটি মুছে ফেলার মাধ্যমে এটি সমাধান করতে সক্ষম হয়েছি (সেখানে কেবলমাত্র একটি রেকর্ড ছিল) আমি ধরে নিই যে ইএফ সিদ্ধান্ত নিয়েছে যে আমার স্থানান্তর সরঞ্জামটি ব্যবহার করে আমার ডাটাবেস আপডেট করার দরকার ছিল - তবে আমি নিজেই এটি নিজেই সম্পন্ন করেছি।


4
প্রথমে ডাটাবেস এবং এটি এটি স্থির করে। প্রথম রেকর্ডটি ছিল প্রাথমিক ক্রিয় যা প্রথম কোডটি ঘটেছিল তবে আমি প্রথমে ডাটাবেস ব্যবহার করে এবং এমএস এসকিউএল সার্ভারে টেবিলটি পরিবর্তন করার পরে এটি সংশোধন করেছি।
সলিডস্পেক 4444

কাজ করছে. আমি স্ক্যাফলড ভিউ যুক্ত করার সময় ত্রুটি পেয়েছি। দৃশ্য এর ডেটা প্রসঙ্গ বর্গ ছিলApplicationDbContext
ভিনসেন্ট Saelzler

79

এটি আমার পক্ষে কাজ করেছে - অন্য কোনও পরিবর্তনের প্রয়োজন নেই।

DELETE FROM [dbo].[__MigrationHistory]

4
আমার জন্যও কাজ করেছেন। খুব অদ্ভুত ফিক্স। আমি মনে করি, ইতিহাসে একটি ভাঙ্গা স্থানান্তর হয়েছিল। আমি সমস্ত স্থানান্তর মুছে ফেলার চেষ্টা করব এবং আবার একটি প্রাথমিক তৈরি করব।
হাকান

4
@ ডেভ ওয়য়েলস আপনি এই এসকিউএল সরাসরি এসএসএমএসে চালাতে পারবেন
ড্যানিয়েল ডি জাওয়ান

4
আমার জন্যও কাজ করেছেন। একটি ডাটাবেসে এই টেবিলটি বিদ্যমান ছিল এবং অন্য ডাটাবেজে এটি ছড়িয়ে নেই
তেজাস

4
শেষের মডেল আপডেট না হওয়া পর্যন্ত আমার কোডগুলি ঠিকঠাক চলার কারণে উপরের উত্তরগুলি আমাকে সহায়তা করতে পারে না। আপনার উত্তরটি কৌশলটি করেছে। চিয়ারস মানুষ !!
সিথু

4
এটি আমার পক্ষে কাজ করে না, এবং আমাকে ডিবি মুছে ফেলার, মাইগ্রেশনগুলি পুনরায় চালানো এবং ডেটা পুনরায় যুক্ত করার প্রয়োজন করেছিল। সাবধান।
অ্যাডামনস্ট্যাক

35

এই পোস্টটি আমার সমস্যা স্থির। এটা তোলে নিম্নলিখিত লাইন যোগ সম্পর্কে সব Application_Start()মধ্যে Global.asax:

Database.SetInitializer<Models.YourDbContext>(null);

তবে এটি আপনার মডেলের প্রতিটি সম্পাদনার জন্য ডাটাবেস বিনোদন করার কারণ এবং আপনি আপনার ডেটা আলগা করতে পারেন।


4
আমি চাই না যে আমার ডেটা ক্ষতিগ্রস্থ হোক বা ক্ষতি হোক।
21:44

স্যার সেরা পন্থা না। সমাধান তবে নির্ভরযোগ্য নয়
আহসান আফতাব

14

যদি আপনি আপনার "ডাটাবেস> সিস্টেম টেবিলগুলি" থেকে "[__MigrationHistory]" সারণীটি মুছে ফেলেন তবে এটি কার্যকর হবে।


এটা কাজ করে। [__MigrationHistory] টেবিল মোছার পরে কেবল ইডিএমএক্স মোডেলকে আপডেট করুন।
দিমিত্রিভাইকো

12

এটি একটি অদ্ভুত ত্রুটি ছিল, ,, শেষ পর্যন্ত এটি আমার ত্রুটি ছিল না, এটি মাইক্রোসফ্টের ছিল, আমি সত্তার কাঠামোটি "প্রাক-রিলিজ" সংস্করণ ইনস্টল করেছি এবং এই ত্রুটির জন্য এটি দায়ী ছিল, যখন আমি স্থিতিতে উন্নীত হয়েছিলাম এটি হতাশ প্রকাশ করুন, আমি আপনাকে এক সপ্তাহ বা তার সমাধানের জন্য এই প্রশ্নটি জিজ্ঞাসা করার সময় সবাই আমাকে বিশ্বাস করার জন্য ধন্যবাদ তাই আমি নিশ্চিত যে এই সমস্যাটি আর কোথাও নেই: সত্তা ফ্রেমওয়ার্ক.ডল এর ​​সংস্করণ যা ঘটায় সমস্যাটি 6.0.2 ছিল যদি এটি সাহায্য করে।


12

সকলেই এই ত্রুটি থেকে মাথা ব্যথা পেয়েছে: আপনার সমস্ত প্রজেক্টকে একই সত্তা ফ্রেমওয়ার্ক সমাবেশে একটি রেফারেন্স রয়েছে তা সম্পূর্ণ নিশ্চিত করুন।

ছোট গল্প:

আমার মডেল এবং আমার আবেদনগুলি বিভিন্ন সমাবেশে ছিল। এই সমাবেশগুলি সত্তা কাঠামোর একটি ভিন্ন সংস্করণ উল্লেখ করেছিল। আমি অনুমান করি যে দুটি সংস্করণ একই মডেলের জন্য আলাদা আইডি উত্পন্ন করেছে। সুতরাং যখন আমার অ্যাপ্লিকেশনটি মডেলটির আইডিটি চালায় তখন __MigrationHistory- র সর্বশেষতম মাইগ্রেশনের একটির সাথে মেলে না। সর্বশেষ ইএফ রিলিজের সমস্ত রেফারেন্স আপডেট করার পরে ত্রুটিটি আর কখনও প্রদর্শিত হয়নি।


হ্যাঁ, এটি আমার ক্ষেত্রে ছিল বেশিরভাগ প্রকল্পগুলি ef6.1.3 এর সাথে ছিল, যখন সদ্য নির্মিত পরীক্ষা প্রকল্পটি কোনওভাবে ef6.0 এর সাথে ছিল।
জেডজেডজ

7

আমি এই সমস্যাটি সমাধান করতে অনেক দিন ব্যয় করেছি, অনেকগুলি বিভিন্ন পোস্ট বিশ্লেষণ করেছি এবং অনেকগুলি বিকল্প চেষ্টা করেছি এবং শেষ পর্যন্ত স্থির করেছি। EF কোডটি প্রথম মাইগ্রেশন ব্যবহার করে আমার সমাধানে এই 2 টি প্রকল্প:

  • কনসোল অ্যাপ্লিকেশন "ডাটামোডেল" যা মূলত এসেম্বলি হিসাবে ব্যবহার করে যা আমার সমস্ত কোডের প্রথম সত্ত্বা, ডিবি কনটেক্সট, মিরগেশন এবং জেনেরিক সংগ্রহস্থল রয়েছে ory প্যাকেজ ম্যানেজার কনসোল থেকে মাইগ্রেশন উত্পন্ন করতে আমি এই প্রকল্পে পৃথক খালি স্থানীয় ডাটাবেস ফাইল (ডেটামোডেল / অ্যাপ_ডাটা ফোল্ডারে) অন্তর্ভুক্ত করেছি।
  • WebApi, যা ডেটা মডেল প্রকল্পের উল্লেখ করে এবং WebApi / App_Data ফোল্ডার থেকে স্থানীয় ডাটাবেস ফাইল ব্যবহার করে, যা প্রকল্পের অন্তর্ভুক্ত নয়

ওয়েবএপি-র অনুরোধ করার সময় আমি এই ত্রুটিটি পেয়েছি ...

আমার পরিবেশ:

  • উইন্ডোজ 8.1 x64
  • আপডেট 1 সহ ভিজ্যুয়াল স্টুডিও 2015 পেশাদার
  • আমার সমস্ত প্রকল্পগুলি নেট নেট ফ্রেমওয়ার্ক 4.6.1 এর জন্য লক্ষ্যযুক্ত
  • নিউগেট থেকে সত্ত্বা ফ্রেমওয়ার্ক 6.1.3

এখানে আমি উল্লেখ করা ব্যতিক্রম এড়াতে আপনার মনোযোগ দেওয়া উচিত এবং সমস্ত শর্তাদি / প্রয়োজনীয়তাগুলি পূরণ করতে হবে এমন সমস্ত মন্তব্য সংগ্রহ করেছি:

  1. আপনার সমাধানের সমস্ত প্রকল্পের জন্য আপনার কেবলমাত্র একক সংস্করণ ন্যুগেট প্যাকেজটি ব্যবহার করা উচিত।
  2. ডাটাবেস, ক্রমক্রমে চালিত দ্বারা তৈরি সমস্ত মাইগ্রেশন স্ক্রিপ্টগুলির একই কাঠামো / স্কিমা থাকা উচিত যেমন আপনি ডাটাবেসকে লক্ষ্য করেন এবং সত্তা মডেলের সাথে মিল রাখেন। 3 টি জিনিস অনুসরণ করে অবশ্যই একে অপরের সাথে সামঞ্জস্য / প্রতিফলন / মেলে:
    • আপনার সমস্ত মাইগ্রেশন স্ক্রিপ্ট শেষ পর্যন্ত
    • বর্তমান কোড প্রথম সত্তা মডেল রাজ্য (DbContext, সত্তা)
    • লক্ষ্য ডাটাবেস
  3. টার্গেট ডাটাবেস (এমডিএফ ফাইল) শেষ মাইগ্রেশন স্ক্রিপ্ট আপ / আপডেট করা উচিত। আপনার টার্গেট ডাটাবেসের "__MigrationHistory" টেবিলটিতে আপনার কাছে থাকা সমস্ত মাইগ্রেশন স্ক্রিপ্টগুলির রেকর্ড রয়েছে তা যাচাই করে নিন, এর অর্থ হ'ল সমস্ত মাইগ্রেশন স্ক্রিপ্টগুলি সেই ডাটাবেসে সফলভাবে প্রয়োগ করা হয়েছিল। আমি আপনাকে উত্সাহিত স্টুডিওটি প্রজন্মের সঠিক কোড প্রথম সত্তা এবং আপনার ডাটাবেসের সাথে সম্পর্কিত প্রসঙ্গের জন্য ব্যবহার করার পরামর্শ দিচ্ছি, প্রকল্প -> নতুন আইটেম যুক্ত করুন -> অ্যাডো.নেট সত্তা ডেটা মডেল -> কোড প্রথম ডাটাবেস থেকে: অবশ্যই, বিকল্প হিসাবে, যদি আপনার কাছে কোনও ডাটাবেস নেই আপনি ম্যানুয়ালি মডেল (কোড প্রথম সত্তা এবং প্রসঙ্গ) লিখতে পারবেন এবং তারপরে প্রাথমিক মাইগ্রেশন এবং ডাটাবেস তৈরি করতে পারবেন।
  4. সংযোগ স্ট্রিং এর নাম যেমন MyConnectionString মধ্যে কনফিগ প্রারম্ভে প্রকল্পের ফাইল (Web.config / App.config):

    <configuration>
      <connectionStrings>
        <add name="MyConnectionString" connectionString="...">
      </connectionStrings>
    <configuration>
    

    আপনার ডিবি কনটেক্সট এর কনস্ট্রাক্টরে পাস করা প্যারামিটারের সমান হওয়া উচিত:

     public partial class MyDbContext : DbContext
     {
        public MyDbContext()
           : base("name=MyConnectionString"){}
        ...
    
  5. প্যাকেজ ম্যানেজার কনসোল ব্যবহার করার আগে , নিশ্চিত হয়ে নিন যে আপনি আপডেটের জন্য সঠিক ডাটাবেস ব্যবহার করছেন বা মাইগ্রেশন উত্পন্ন করছেন এবং প্রয়োজনীয় প্রকল্পটি সমাধানের সূচনা প্রকল্প হিসাবে সেট করা আছে ডাটাবেসের সাথে সংযোগের জন্য এটি .config ফাইল থেকে সংযোগ স্ট্রিং ব্যবহার করবে, যা প্রকল্পে, এটি প্রারম্ভিক প্রকল্প হিসাবে সেট করা আছে।
  6. এবং মূলটি , যা আমার সমস্যাটিকে স্থির করেছে: এটি অদ্ভুত, তবে আমার ওয়েবএপি / বিন ফোল্ডারে ডেটামোডেল.এক্সই পুরানো ছিল, শেষ বিল্ডের পর থেকে তা রিফ্রেশ হয়নি। যেহেতু মাইগ্রেশনগুলি আমার সমাবেশ ডেটামোডেল.এক্সে এম্বেড করা হয়েছিল তখন আমার ওয়েবএপি পুরানো মিরর ব্যবহার করে আপডেট করা ডাটাবেস। আমি বিভ্রান্ত হয়ে পড়েছিলাম কেন WebApi তে ডাটাবেস আপডেট করার পরে এটি ডেটামোডেল থেকে সর্বশেষ মাইগ্রেশন স্ক্রিপ্টের সাথে সামঞ্জস্য নয়। নিম্নলিখিত কোডটি স্বয়ংক্রিয়ভাবে তৈরি হয় (যদি না থাকে) বা আমার ওয়েবএপি / অ্যাপ_ডাটা ফোল্ডারে সর্বশেষ মাইগ্রেশন স্থানীয় ডাটাবেসের আপডেট হয়।

       public class WebApiApplication : System.Web.HttpApplication
       {
           protected void Application_Start()
           {
               Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); 
               ...
    

    আমি পরিষ্কার এবং পুনর্নির্মাণ সমাধানের চেষ্টা করেছি তবে এটি কোনও ফল দেয় না, আমি ওয়েবএপি থেকে বিন এবং আপত্তি ফোল্ডারগুলি সম্পূর্ণরূপে অপসারণের চেয়ে, ওয়েবএপি / অ্যাপ_ডাটা থেকে মুছে ফেলা ডাটাবেস ফাইলগুলি, নির্মিত, পুনরায় চালু করা ওয়েব অ্যাপির অনুরোধ জানিয়েছিলাম, এটি সঠিক ডাটাবেস তৈরি করেছে - অলস সূচনা (ব্যবহার করে) উপরের লাইনগুলি), যা সর্বশেষতম স্থানান্তরের সাথে সামঞ্জস্য করে এবং ব্যতিক্রমটি বেশি প্রদর্শিত হয়নি। সুতরাং, এটি আপনার সমস্যার সমাধান করতে পারে:

    1. আপনার প্রারম্ভিক প্রকল্প থেকে ম্যানুয়ালি বিন, অবজেক্ট ফোল্ডারগুলি সরান (যা আপনার ডাটাবেস উত্পন্ন / আপডেট করে)
    2. আপনার স্টার্টআপ প্রকল্পটি তৈরি করুন বা আপনার সমস্ত সমাধানটি আরও ভাল করে পরিষ্কার করুন এবং পুনর্নির্মাণ করুন।
    3. প্রকল্প শুরু করে ডাটাবেস পুনরায় তৈরি করুন (উপরে লাইনগুলি কার্যকর করা হবে) বা প্যাকেজ ম্যানেজার কনসোল "আপডেট-ডাটাবেস" কমান্ডটি ব্যবহার করুন।
    4. জেনারেটেড ডিবি এবং __মিরগেশনহিসটরি সর্বশেষ মাইগ্রেশন স্ক্রিপ্টের সাথে মিল রয়েছে কিনা তা ম্যানুয়ালি পরীক্ষা করে দেখুন।

3

আপনি যখন কোনও মডেল সম্পত্তির ডেটা টীকা পরিবর্তন করেন তখন এটি ঘটতে পারে। উদাহরণস্বরূপ: যোগ করা [প্রয়োজনীয়] কোনও প্রোপার্টিতে করার ফলে ডাটাবেস ডিজাইনের একটি মুলতুবি পরিবর্তন ঘটবে।

প্যাকেজ ম্যানেজার কনসোলে চালানো সবচেয়ে নিরাপদ সমাধান:

add-migration myMirgrationName

যা আপ () পদ্ধতিতে সঠিক পরিবর্তনগুলি প্রদর্শন করবে। অতএব, আপনি যদি সিদ্ধান্ত নিতে পারেন যে আপনি সত্যিই এর মাধ্যমে এই জাতীয় পরিবর্তনগুলি প্রয়োগ করতে চান:

update-database

অন্যথায়, আপনি স্রেফ সর্বশেষতম মাইগ্রেশনটি __MigrationHistory টেবিল থেকে এবং মাইগ্রেশন ফোল্ডার থেকে সমাধান এক্সপ্লোরার থেকে মুছতে পারেন।


এটি অবশ্যই আমি এখানে দেখেছি সেরা উত্তর। মাইগ্রেশন ইতিহাস মুছে ফেলার পরামর্শটি আমার মতে খুব খারাপ ধারণা!
মিগ্রেইনিয়ার

আপনার মন্তব্যের জন্য ধন্যবাদ. আমি সাধারণত মাইগ্রেশন ইতিহাস মুছে ফেলার প্রস্তাব দিই না, তবে বিশেষ ক্ষেত্রে পূর্ববর্তী মাইগ্রেশন পয়েন্টটি খুব আলাদা ছিল না - অর্থাত্ ওপি-র মাধ্যমে খুব বেশি মডেল পরিবর্তন ঘটেনি - তাই আমি ভেবেছিলাম যে একক পদক্ষেপ ফিরে আসতে সাহায্য করতে পারে , কেবলমাত্র শেষ মাইগ্রেশন (গুলি) রেকর্ড মুছে ফেলে।
মোহাম্মদ নাগিয়েব

3

কেবলমাত্র আপনার ডেটাবেসে _ অভিবাসন ইতিহাসে মাইগ্রেশন ইতিহাস মুছুন Delete এটা আমার জন্য কাজ করেছে


2

আমি a7madx7 হিসাবে একই সমস্যা ছিল, তবে ইএফ (v6.1.1) এর স্থিতিশীল প্রকাশের সাথে, এবং রেজোলিউশনে পোস্ট পেয়েছি:

http://cybarlab.com/context-has-changed-since-the-database-was-created

: তারতম্য সঙ্গে http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3

২ য় লিঙ্কে ভিবি'র জন্য নির্দিষ্ট উল্লেখ অন্তর্ভুক্ত করা হয়েছে ..... "আপনি কেবল আপনার অ্যাপ্লিকেশন-স্টার্ট পদ্ধতিতে এই জাতীয় বৈশ্বিক.অ্যাস্যাক্স ফাইলটিতে এই সমস্যাযুক্ত সমস্ত ডাটাবেস কনটেক্সট যুক্ত করতে পারেন" :

Database.SetInitializer(Of DatabaseContext)(Nothing)

এনবি: আমাকে আমার ক্লাস প্রয়োগকারী ডিবি কনটেক্সট এর নামের সাথে "ডাটাবেস কনটেক্সট" প্রতিস্থাপন করতে হয়েছিল

আপডেট: এছাড়াও, বিদ্যমান টেবিলগুলির সাথে সংযোগ স্থাপনের জন্য কোডফার্স্ট পদ্ধতির ব্যবহার করার সময়, EF ম্যাপিংগুলি সঞ্চয় করার জন্য একটি টেবিল "_মিগ্রেশনহিটরি" তৈরি করেছে কিনা তা পরীক্ষা করে দেখুন। আমি এই টেবিলটির পুনরায় নামকরণ করেছি তখন Global.asax থেকে SetInitializer অপসারণ করতে সক্ষম হয়েছি।


1

আমি কেবল ওয়েবসাইট ফোল্ডারের সমস্ত ফাইল মুছে ফেলা এবং তারপরে এটি পুনরায় প্রকাশের মাধ্যমে একটি অনুরূপ সমস্যার সমাধান করেছি।


1

সমস্ত সারণী পরিচয় মুছে ফেলুন

Delete _MigrationHistory
Delete AspNetRoles
Delete AspNetUserClaims
Delete AspNetUserLogins
Delete AspNetRoles
Delete AspNetUser

1

সরঞ্জাম মেনু থেকে, নিউগেট প্যাকেজ ম্যানেজারটি ক্লিক করুন, তারপরে প্যাকেজ ম্যানেজার কনসোল (পিএমসি) ক্লিক করুন। পিএমসিতে নিম্নলিখিত কমান্ডগুলি প্রবেশ করান।

সক্ষম-মাইগ্রেশন অ্যাড-মাইগ্রেশন ইন্ডি আপডেট-ডেটাবেস অ্যাপ্লিকেশন চালান। সমস্যার সমাধান এখানে থেকে


1

যখন আমি বিকাশ করছি, আমি মাইগ্রেশন কনফিগার করতে এই ব্যবহারিক ক্লাসটি ব্যবহার করতে পছন্দ করি।

আশা করি এটা সাহায্য করবে.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
        this.Configuration.LazyLoadingEnabled = false;
    }

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

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

        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

        Database.SetInitializer(new StackOverflowInitializer());
    }

    public class StackOverflowInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
    {
        public StackOverflowInitializer()
        {
            // TODO NOTHING, COMMENT ALL

            // IF CHANGES, RECREATE
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>());

            // CREATE ONLY NOT EXITS
            //Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<ApplicationDbContext>());
        }

    }

    public System.Data.Entity.DbSet<stackoverflow.Models.Company> Companies { get; set; }

}

0

পুরানো প্রোডাক্ট ভার্সন সহ সারণী [__MigrationHistory] সারণিতে মুছে ফেলা আমার পক্ষে কাজ করেছে। এই উত্তরটি তাদের জন্য যারা পুরো [__MigrationHistory] টেবিলটি মুছতে চান না। প্রোডাক্ট ভার্সন কলামে পুরানো সংস্করণ সহ সারিগুলি কেবল মুছুন। আশা করি এটি কারও সাহায্য করবে!


0

নীচে একই ধরণের ত্রুটি ছিল যার মুখোমুখি হয়েছিল

'পিএসএনএল কনটেক্সট' প্রসঙ্গে সমর্থনকারী মডেলটি ডেটাবেস তৈরি হওয়ার পরে পরিবর্তিত হয়েছে। ডাটাবেস আপডেট করার জন্য কোড ফার্স্ট মাইগ্রেশন ব্যবহার করার কথা বিবেচনা করুন ( http://go.microsoft.com/fwlink/?LinkId=238269 )।

আমি ত্রুটিটি সমাধান করার জন্য গ্লোবাল.অ্যাসাক্সের অ্যাপ্লিকেশন স্টার্ট ইভেন্টের নীচের অংশটি যুক্ত করেছি

ডাটাবেস.সেটআইনিটিয়ালাইজার (নাল);

এটি সমস্যার সমাধান করেছে


0

কেবল ত্রুটির অর্থ হল আপনার মডেলগুলির পরিবর্তন হয়েছে এবং এটি ডিবির সাথে সিঙ্কে নেই, তাই প্যাকেজ ম্যানেজার কনসোলে যান, add-migration foo2 এটি সমস্যার কারণ কী ঘটছে তার একটি ইঙ্গিত দেবে, আপনি কি কিছু অপসারণ করেছেন বা আমার ক্ষেত্রে আমি একটি ডেটা টিকা সরিয়ে দিচ্ছি । সেখান থেকে আপনি পরিবর্তনটি পেতে পারেন এবং আশা করি এটি আপনার মডেলটিতে বিপরীত।

এর পরে foo2 মুছুন।


0

আমি জানি আমি খুব দেরী করেছি, তবে আমি অবদানও দিতে চাই। এই ত্রুটিটি সত্যই অদ্ভুত, কারণ কীভাবে পরিবর্তনগুলি রেন্ডার করা উচিত তা ব্রাউজার বুঝতে পারে না কারণ ক্লাসগুলি এবং তাদের বৈশিষ্ট্যগুলি পরিবর্তিত হতে পারে তবে ডেটাবেসের প্রতিশ্রুতিবদ্ধ নয়।

সুতরাং একটি কাজ করুন,

এই কমান্ডটি ব্যবহার করে প্যাকেজ ম্যানেজার কনসোলে একটি সরঞ্জাম স্থানান্তর করুন (সরঞ্জামগুলি> নিউগেট প্যাকেজ ম্যানেজার> প্যাকেজ ম্যানেজার কনসোল) :

অ্যাড-মাইগ্রেশন আপডেটমাইগ্রেশন

যেখানে আপডেটমাইগ্রেশন হ'ল আপনার অভিবাসনের নাম। আপনি এটিকে আপনার পছন্দের কোনও নাম দিতে পারেন তবে দয়া করে সুনির্দিষ্ট হন।

এর পরে, আমাদের কেবল ডাটাবেস আপডেট করা দরকার, সুতরাং এটি চালান:

আপডেট ডাটাবেস

এখন আপনি ডাটাবেসে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করেছেন, কেবল আপনার ব্রাউজারটি রিফ্রেশ করুন এবং আপনি সেখানে যান!

আশাকরি এটা সাহায্য করবে.


0

এটি আসে কারণ আপনি আপনার মডেলগুলির একটিতে কিছু সম্পত্তি যুক্ত করেছেন এবং আপনি তা করেন নি update-Database। এটি সমাধান করার জন্য আপনাকে এটিকে মডেল থেকে সরাতে হবে বা আপনাকে add-migration anyProperName সেই বৈশিষ্ট্যগুলি সহ এবং করতে হবে Update-database


0

আমি যখন আমার মডেলটিতে পরিবর্তন করেছি এবং ডেটাবেস আপডেট করার জন্য পরিবর্তনের জন্য মাইগ্রেশন না করি তখন এই ত্রুটিটি আমার কাছে ঘটে।

আপনি যদি নিজের কোডটিতে প্রথম মাইগ্রেশন স্কিমা পরিবর্তন করে থাকেন

মাইগ্রেশন যুক্ত করতে ভুলবেন না

add-migration UpdatesToModelProperites 

উপরের কমান্ডটি মডেলটিতে আপনি যে সমস্ত পরিবর্তন করেছেন সেগুলি পড়বে এবং এটি আপ () এবং ডাউন () পদ্ধতিতে লিখবে।

তারপরে নীচের কমান্ডটি ব্যবহার করে কেবল আপনার ডাটাবেস আপডেট করুন।

update-database

এটা আমার জন্য কাজ করে।


-2

বিদ্যমান ডিবি মুছুন, একই নামে নতুন ডিবি তৈরি করুন, সমস্ত ডেটা অনুলিপি করুন ... এটি কার্যকর হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.