ASP.NET কোর 2.0 তে আপগ্রেড করার পরে মাইগ্রেশন তৈরি করতে অক্ষম


109

এএসপি.নেট কোর 2.0 তে আপগ্রেড করার পরে, আমি আর মাইগ্রেশন তৈরি করতে পারব না।

আমি পাচ্ছি

"ক্লাস 'প্রোগ্রামে' বিল্ডউইবহোস্ট 'কল করার সময় একটি ত্রুটি ঘটেছে application অ্যাপ্লিকেশন পরিষেবা প্রদানকারী ছাড়াই চালিয়ে যাওয়া Error ত্রুটি: এক বা একাধিক ত্রুটি ঘটেছে ( ব্যবহারকারীর জন্য ব্যর্থ '...' "

এবং

"'মাই কনটেক্সট' টাইপের একটি অবজেক্ট তৈরি করতে অক্ষম the প্রকল্পে 'আইডিজাইনটাইমডিবিবিসন্টেক্সফ্যাক্টরি' এর একটি প্রয়োগ যুক্ত করুন বা ডিজাইনের সময় সমর্থিত অতিরিক্ত নিদর্শনগুলির জন্য https://go.microsoft.com/fwlink/?linkid=851728 দেখুন " "

আমি পূর্বে যে কমান্ডটি $ dotnet ef migrations add InitialCreate --startup-project "..\Web"চালিয়েছি তা হ'ল (ডিবিসিওন্টেক্সট সহ প্রজেক্ট / ফোল্ডার থেকে)

সংযোগ স্ট্রিং: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

এটি আমার প্রোগ্রাম

 public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
       WebHost.CreateDefaultBuilder(args)
           .UseStartup<Startup>()
           .Build();
}

3
সম্ভবত সমস্যাটি প্রোগ্রাম.সিগুলিতে নেই। এটি সম্ভবত আপনার কনফিগার পদ্ধতির শেষে বীজ ডেটা লোড করার জন্য কোনও নির্দেশের ব্যবহার: ডিবিআইনিটিয়ালাইজার n ইনটাইটেলাইজ (প্রসঙ্গ); আপনার যদি সেই নির্দেশ থাকে তবে মন্তব্য করুন: //DbInitializer.Initialize(context); তারপরে পরীক্ষার জন্য মাইগ্রেশন নির্দেশাবলী চালান। যদি সমস্যা দেখা দেয় তবে DbInitializer.cs ক্লাসে অনুসরণ করুন।
মিগুয়েল টরেস সি

1
আপনার মাইকনটেক্সট ক্লাসটি কি অন্য শ্রেণির পাঠাগার প্রকল্পে রয়েছে?
অরহুন

এখানে একই সমস্যা, প্রসঙ্গটি অন্য লাইব্রেরিতে রয়েছে। আইডি যদি প্রসঙ্গে একটি প্যারামিটারকে কম কনসট্রাক্টর যুক্ত করে তবে মাইগ্রেশনগুলি কাজ করছে তবে একই ত্রুটি সহ: (ক্লাস 'প্রোগ্রামে' বিল্ডওয়েবহোস্ট 'কল করার সময় একটি ত্রুটি ঘটেছে application অ্যাপ্লিকেশন পরিষেবা সরবরাহকারী ছাড়াই অবিরত। ত্রুটি: অবজেক্ট রেফারেন্স সেট করা হয়নি কোনও বস্তুর উদাহরণে))
iBoonZ

আপনি কি শেষ পর্যন্ত সমাধান করেছেন?
কনরাড ভিল্টারস্টেন

এই মন্তব্যটির জন্য @ মিগুয়েলটোরেস সি ধন্যবাদ। আমি আমার বপনের পদ্ধতিগুলি সম্পর্কে মন্তব্য করেছি এবং অভিবাসনগুলি আবার কাজ শুরু করে began অসংখ্য ধন্যবাদ !!!
অমিত ফিলিপস 2

উত্তর:


123

আপনি এমন একটি শ্রেণি যুক্ত করতে পারেন যা আপনার ওয়েব প্রকল্পের অভ্যন্তরে IDesignTimeDbContextFactory প্রয়োগ করে।

নমুনা কোডটি এখানে:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new CodingBlastDbContext(builder.Options);
    }
}

তারপরে, আপনার ডাটাবেস প্রকল্পে নেভিগেট করুন এবং কমান্ড লাইন থেকে নিম্নলিখিতটি চালান:

dotnet ef migrations add InitialMigration -s ../Web/

dotnet ef database update -s ../Web/

-s stands for startup project and ../Web/ is the location of my web/startup project.

সংস্থান


2
আমি পাচ্ছি: কনফিগারেশন ফাইল 'appsettings.json' পাওয়া যায় নি এবং এটি alচ্ছিক নয়। শারীরিক পথটি হ'ল 'সি: \ ব্যবহারকারীগণ \ XXX \ ডকুমেন্টস \ ভিজ্যুয়াল স্টুডিও 2017 \ প্রকল্পগুলি \ XXX \ এসসিআর \ XXX.Api \ বিন \ ডিবাগ \ নেটকোর অ্যাপ 2.0 \ appsettings.json' son আমার অ্যাপসেটিংগুলি সিটিতে রয়েছে: \ ব্যবহারকারীগণ \ XXX \ নথি \ ভিজ্যুয়াল স্টুডিও 2017 \ প্রকল্পগুলি \ XXX \ এসসিআর \ XXX.Api।
রিফ্ট

স্থানীয় কপি করার জন্য আপনার কাছে অ্যাপসেটেটিংস.জসন ফাইল রয়েছে তা নিশ্চিত করুন এবং এটি খুঁজে না পেয়ে সমস্যাটি সমাধান করা উচিত
ডাইমটো

1
এই সমাধানটি আপনার হোস্ট অ্যাপ্লিকেশনটিতে সত্তা ফ্রেমওয়ার্কের উপর নির্ভরশীলতার পরিচয় দেয় (আমার ক্ষেত্রে এটি একটি ওয়েব প্রকল্প)। এই সমস্যা এড়ানোর পেতে কোন উপায় আছে কি? আমি চাই আমার আমার সংগ্রহশালাটি EF স্টাফ ধরে রাখুক, এবং ওয়েব অ্যাপ্লিকেশনে EF প্রবর্তন করবে না।
বনুনা

এটি স্বীকৃত উত্তর হওয়া সত্ত্বেও, এটি আরও ভাল: stackoverflow.com/a/52671330/1737395 প্রকৃতপক্ষে,
--verbose

73

দরকার নেই IDesignTimeDbContextFactory

চালান

add-migration initial -verbose

যে অধীনে বিশদ প্রকাশ করা হবে

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

সতর্কতা, যা সমস্যার মূল কারণ।

আমার ক্ষেত্রে সমস্যা ছিল, যা ছিল ApplicationRole : IdentityRole<int>এবং অনুরোধ services.AddIdentity<ApplicationUser, IdentityRole>()করছিল যা নীচে ত্রুটির সৃষ্টি করে

System.ArgumentException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,
TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'.
---> System.TypeLoadException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole', 
on 'Microsoft.AspNetCore.Identity.UserStoreBase`8[TUser,TRole,TKey,TUserClaim,
TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type parameter 'TRole'.

3
হ্যাঁ - ভারবোজ আসলে প্রকৃত সমস্যাটি উদঘাটনে সহায়তা করে। আমার ক্ষেত্রে অ্যাডডিবিকন্টেক্সট পরিষেবাগুলি শুরু করতে যোগ করা হয়নি।
সুধাকড়সদ

3
ডটনেট ইফ মাইগ্রেশনস
ইনিশিয়াল ক্রিয়েট --verbose

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

1
এটি একটি দুর্দান্ত টিপ, গ্রহণযোগ্য উত্তর হওয়া উচিত
অভ্রোহম ইয়িসরোয়েল

1
আপনাকে অনেক ধন্যবাদ, এটি আমার সমস্যাটি খুঁজে পেতে এবং এটি সমাধান করতে সহায়তা করেছে। আমার ক্ষেত্রে এটি "ডেটা.অ্যাক্সেস.ডাল.মেনডিবি কনটেক্সট" টাইপের জন্য সংজ্ঞায়িত কোনও প্যারামিটারলেস কনস্ট্রাক্টর ছিল এবং তাই আমি কেবল কনস্ট্রাক্টর থেকে প্যারামিটারগুলি সরিয়েছি এবং এটি ম্যাজিকের মতো কাজ করেছে!
সারা

25

সমাধান 1: (99% ক্ষেত্রে সমস্যার সন্ধান করুন)

ওয়েব অ্যাপ্লিকেশন প্রকল্পটি স্টার্টআপ প্রকল্প হিসাবে সেট করুন

-verboseবিকল্প সহ নিম্নলিখিত কমান্ডগুলি চালান ।

Add-Migration Init -Verbose

-verbose বিকল্পটি প্রকৃত সমস্যাটিকে প্রকট করতে সহায়তা করে, এতে বিশদ ত্রুটি রয়েছে।

সমাধান 2:

পুনরায় নামকরণ BuildWebHost() করুন CreateWebHostBuilder(), কারণ অ্যাপটি চালনা ছাড়াই হোস্টকে কনফিগার করে এমন Entity Framework Core toolsকোনও CreateHostBuilderপদ্ধতি আবিষ্কারের প্রত্যাশা করুন।

.NET কোর 2.2

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
} 

.NET কোর 3.1

নাম পরিবর্তন BuildWebHost()করুনCreateHostBuilder()

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

সমাধান 3:

Dbcontextআপনি নির্ভরতা ইনজেকশনে যোগ করেছেন তা নিশ্চিত করুন : AddDbContext<TContext>আপনার DbContext টাইপ TContextএবং DbContextOptions<TContext>পরিষেবা ধারক থেকে ইনজেকশনের জন্য সংশ্লিষ্ট দুটিই তৈরি করবে । এটির জন্য আপনার DbContextপ্রকারের সাথে কনস্ট্রাক্টর যুক্তি যুক্ত করা দরকার যা গ্রহণ করে DbContextOptions<TContext>

উদাহরণ: সূচনাপুস্তকগুলিতে

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
}

AppDbContext কোড:

public class AppDbContext: DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
      :base(options)
    { }

}

1
এটি আমার পক্ষে কাজ করেছে। থেকে Program.cs মধ্যে BuildWebHost ফাংশন পরিবর্তিত public static IWebHostBuilder BuildWebHost(string[] args)করার public static IWebHost BuildWebHost(string[] args)সঙ্গে .Build()এখন ফাংশন অন্তর্ভুক্ত
zola25

1
ছেলেরা, আপনি যদি এএসপি.নেট কোর ২.১+ ব্যবহার করেন তবে বিল্ডওয়েস্টহোস্ট পদ্ধতির আলাদা নাম থাকবে - ডকুমেন্টস.মাইক্রোসফট.ইন.ইউএস / এসপনেট / কোর্ট / ইমিগ্রেশন / এর কারণে ক্রিয়েটওয়েবহস্তবিল্ডার তাই বিল্ডওয়েবহোস্টে ক্রিয়েটওয়েবহোস্টবিল্ডার নামকরণ করে মাইগ্রেশন পাবেন বিল্ডও ওয়েস্ট হোস্ট এবং এটি থেকে DbContext নিতে।
কেইএমবিএল

2
ধন্যবাদ সাথী, ব্যবহার না করে কনফিগার করতে 2 ঘন্টা ব্যয় করার পরে সমাধান হয়েছেIDesignTimeDbContextFactory
আজ্রি জাকারিয়া

3
"-ভারবোস" পতাকাটির জন্য ধন্যবাদ। এটি আমাকে ব্যতিক্রমের মূল কারণটি খুঁজে পেতে সহায়তা করেছে।
সের্গেই_

21
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
    }
}

কেবল নামকরণ BuildWebHost()করুন CreateWebHostBuilder(), কারণ মাইগ্রেশনগুলি ডিফল্টরূপে এই পদ্ধতিটি ব্যবহার করে।


4
কি. এই সমস্যাটি নিয়ে কাজ করা প্রতিটি পৃষ্ঠায় এটির বিজ্ঞাপন দেওয়া উচিত আপনি গুরুতর । তাৎক্ষনিক সফলতা. ধন্যবাদ.
চেইম এলিয়াহ

আমার দিন বাঁচাও !!! এটা খুব অদ্ভুত ত্রুটি। আমি পূর্বরূপ 7 এর সাথে নেট কোর 3.0 ব্যবহার করছি এবং এই ত্রুটিটি বিদ্যমান রয়েছে
ডি টোডোরভ

@ ডিটোডোরভ এই ডেবলব্লাগগুলি পড়েন mic মাইক্রোসফ্ট.ডটনেট /
শেরক্স

ডি টডোরভ স্রেফ বিল্ডওয়েবহোস্ট () এর নতুন নাম পরিবর্তন করে ক্রেস্টহোস্টবিল্ডার ()
আলী বায়াত

1
@ ওয়ার্ননারসিডি কিউজ ওয়ার্কার ক্রিয়েটহস্টবিল্ডার () পদ্ধতি ব্যবহার করে যা নেট কোর 3 এর আইহোস্টবিল্ডার প্রয়োগ করে
শেরক্স

11

আমার ক্ষেত্রে, সমস্যার কারণটি ছিল একাধিক স্টার্টআপ প্রকল্প। আমার সমাধানে আমার তিনটি প্রকল্প রয়েছে: এমভিসি, এপি এবং ডাল। ডাল প্রকল্পে DbContext এবং মাইগ্রেশন।

আমি একাধিক স্টার্টআপ প্রকল্প কনফিগার করেছি। আমি যখন স্টার্ট ক্লিক করেছি তখন এমভিসি এবং এপিআই প্রকল্প দুটিই চলছিল। তবে এই ক্ষেত্রে আমি এই ত্রুটিটি পাচ্ছিলাম।

"'মাই কনটেক্সট' টাইপের একটি অবজেক্ট তৈরি করতে অক্ষম the প্রকল্পে 'আইডিজাইনটাইমডিবিবিসন্টেক্সফ্যাক্টরি' এর একটি প্রয়োগ যুক্ত করুন বা ডিজাইনের সময় সমর্থিত অতিরিক্ত নিদর্শনগুলির জন্য https://go.microsoft.com/fwlink/?linkid=851728 দেখুন " "

একমাত্র প্রারম্ভিক প্রকল্প হিসাবে এমভিসি সেট করার পরে এবং প্যাকেজ ম্যানেজার কনসোলে ডাল নির্বাচন করার পরে আমি সফলভাবে মাইগ্রেশন যুক্ত করতে পারলাম।


1
আপনাকে ধন্যবাদ, আমার সাথে একই ধরণের ঘটনা ঘটেছে। আমাকে যেখানে স্টার্টআপ / প্রোগ্রাম ক্লাস বিদ্যমান সেখানে স্টার্টআপ প্রকল্পটি পরিবর্তন করতে হয়েছিল। ত্রুটি বার্তাটি একটি খারাপ রসিকতা।
šuboš Čurgó

1
আউটপুট বার্তাগুলি সত্যিই হতাশাবোধ করেছিল। আমার কোনও প্রারম্ভিক প্রকল্পটি অপ্রত্যাশিতভাবে নির্বাচিত হয়নি। এই কারণেই dbContext তৈরি করা যায়নি। ধন্যবাদ।
আপকিট

1
ধন্যবাদ স্যার ... আমার অনেক সময় সাশ্রয় হয়েছে
নাভিদ খান

7

AppContext.cs এ AppContext বর্গ ছাড়াও অন্য শ্রেণি যুক্ত করুন:

// required when local database deleted
public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext>
{
    public AppContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<AppContext>();
          builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new AppContext(builder.Options);
    }
}

এটি আপনার দ্বিতীয় সমস্যার সমাধান করবে:

"'MyContext' প্রকারের একটি অবজেক্ট তৈরি করতে অক্ষম the প্রকল্পে 'IDesignTimeDbContextFactory' এর একটি প্রয়োগ যুক্ত করুন,

এর পরে আপনি অ্যাড-মাইগ্রেশন ইনিশিয়াল করতে সক্ষম হবেন এবং আপডেট-ডাটাবেস কমান্ডটি চালিয়ে এটি কার্যকর করতে পারবেন । তবে আপনার স্থানীয় স্কেল সার্ভারে এখনও কোনও ডাটাবেস না থাকা অবস্থায় এই কমান্ডগুলি চালিত হলে আপনি প্রথম ত্রুটির মতো সতর্কতা পাবেন: "একটি ত্রুটি

ক্লাস 'প্রোগ্রামে' বিল্ডওয়েবহোস্ট 'কল করার সময় ঘটেছিল ... লগইন ব্যর্থ হয়েছে। ব্যবহারকারীর জন্য লগইন ব্যর্থ '...' "

তবে এটি ত্রুটি নয় কারণ মাইগ্রেশন তৈরি হবে এবং এটি কার্যকর করা যেতে পারে। সুতরাং এই ত্রুটিটি কেবল প্রথমবারের জন্য উপেক্ষা করুন, এবং পরে ডিবি যেহেতু বিদ্যমান থাকবে তা আর ঘটবে না।


4

আপনার রেফারেন্স আছে তা যাচাই করুন

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />

5
আমি ব্যবহার করছি <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />যা উল্লেখ উল্লেখ রয়েছে। আমি উপরেরগুলি সহও চেষ্টা করেছি, কিন্তু কোনও পরিবর্তন হয়নি।
রুহম

4

আপনি এই আলোচনাটি থেকে এই সমাধানটি চেষ্টা করতে পারেন , যা এই পোস্ট দ্বারা অনুপ্রাণিত হয়েছিল

public static IWebHost MigrateDatabase(this IWebHost webHost)
{
    using (var scope = webHost.Services.CreateScope())
    {
        var services = scope.ServiceProvider;

        try
        {
            var db = services.GetRequiredService<MyContext>();
            db.Database.Migrate();
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while migrating the database.");
        }
    }

    return webHost;
}
public static void Main(string[] args)
{
    BuildWebHost(args)
        .MigrateDatabase()
        .Run();
}

2
আমি এখনও পাচ্ছি: 'IDesignTimeDbContextFactory <ডেটাবেস কনটেক্সট>' এর একটি প্রয়োগ যুক্ত করুন ......
রিফ্ট

4

এই নিবন্ধটি আমাকে সত্যই সাহায্য করেছিল: https://elanderson.net/2017/09/unable-to-create-an-object-of-type-applicationdbcontext-add-an-implementation-of-idesigntimedbcontextfactory/

মূল ধারণাটি হ'ল। নেট কোর 1 থেকে 2 থেকে সমস্ত ডিবি ইনিশিয়ালাইজেশনটি স্টার্টআপস থেকে এবং প্রোগ্রামের সিএসগুলিতে সরানো উচিত। অন্যথায় EF টাস্কগুলি কাজ করার সময় আপনার ডিবি ইনসাইটগুলি চেষ্টা করে চালায়।

"সরকারী মাইগ্রেশন ডক্সে একটি দুর্দান্ত বিভাগ রয়েছে ( https://docs.microsoft.com/en-us/ef/core/miscellaneous/1x-2x-upgrade ) শিরোনাম" সরান ডাটাবেস সূচনা কোড "যা আমার কাছে মনে হয়েছিল মিস হয়েছে So


ধন্যবাদ, এটি আমাকেও সাহায্য করেছিল।
সের্গেই

3

থেকে

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation

আপনি যখন একটি নতুন এএসপি.নেট কোর 2.0 অ্যাপ্লিকেশন তৈরি করবেন তখন এই হুকটি ডিফল্টরূপে অন্তর্ভুক্ত থাকে। ইএফ কোর এবং এএসপি.নেট কোর এর পূর্ববর্তী সংস্করণগুলিতে, অ্যাপ্লিকেশনগুলির পরিষেবা সরবরাহকারীর জন্য সরঞ্জামগুলি সরাসরি স্টার্টআপ.কনফিগার সার্ভিসগুলি আহ্বান করার চেষ্টা করে, তবে এই প্যাটার্নটি আর এএসপি.নেট কোর 2.0 অ্যাপ্লিকেশনগুলিতে সঠিকভাবে কাজ করে না। আপনি যদি ASP.NET কোর 1.x অ্যাপ্লিকেশনটি 2.0 তে আপগ্রেড করে থাকেন তবে আপনি নতুন প্যাটার্নটি অনুসরণ করতে আপনার প্রোগ্রামের ক্লাসটি পরিবর্তন করতে পারেন।

নেট কোর 2.x এ কারখানা যুক্ত করুন

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
    {
        public BloggingContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
            optionsBuilder.UseSqlite("Data Source=blog.db");

            return new BloggingContext(optionsBuilder.Options);
        }
    }

3

আমার এই সমস্যাটি ছিল এবং এটি সমাধান -> ওয়েব অ্যাপ্লিকেশন (অন্তর্ভুক্ত প্রোগ্রাম.cs) প্রকল্পের দ্বারা -> "স্টার্টআপ প্রকল্প হিসাবে সেট করুন"

তারপরে চালান -> অ্যাড-মাইগ্রেশন প্রারম্ভিক -ভারবস

প্যাকেজ ম্যানেজার কনসোল এ

প্রারম্ভিক প্রকল্প হিসাবে সেট করুন


আপনাকে ধন্যবাদ, আমার জন্য একমাত্র সমাধান যা কাজ করেছিল তা হ'ল ওয়েব প্রকল্পটিকে স্টার্টআপ প্রকল্প হিসাবে সেট করা এবং ঠিক এটিই করা দরকার।
ব্যবহারকারীর 3012760

3

আপনি যদি এই আইডিজিনটাইমডিবিবি কনটেক্সট ফ্যাক্টরি জিনিসটি এড়াতে চান: কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি আপনার শুরুতে কোনও বীজ পদ্ধতি ব্যবহার করবেন না। আমি আমার প্রারম্ভকালে একটি স্থির বীজ পদ্ধতি ব্যবহার করছিলাম এবং এটি আমার জন্য এই ত্রুটি ঘটাচ্ছে।


2

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

রিফ্যাক্টর মূল পদ্ধতি। Program.cs- এ নিম্নলিখিত উল্লেখগুলি যুক্ত করুন:

মাইক্রোসফ্ট ব্যবহার। এক্সটেনশনস। নির্ভরতা ইন্জেকশন;

মাইপ্রজেক্ট.মাইডিবিকনটেক্সটফোল্ডার ব্যবহার করে;

public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;
        try
        {
            var context = services.GetRequiredService<MyDbConext>();
            DbInitializer.Initialize(context);
        }
        catch (Exception ex)
        {
            var logger = services.GetRequiredService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database.");
        }
    }

    host.Run();
}



2

আমার ক্ষেত্রে আমি সমস্যা, কারণ আমি একটি পদ্ধতি নামে ছিল পেয়েছিলাম SeedData.EnsurePopulated () আমার আহ্বান করা হচ্ছে Startup.cs ফাইল।

public class Startup
{
    public Startup(IConfiguration configuration) => Configuration = configuration;
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        //
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseDeveloperExceptionPage();
        app.UseStatusCodePages();
        app.UseStaticFiles();
        app.UseSession();
        app.UseMvc(routes =>
        {
            //
        });

        SeedData.EnsurePopulated(app);
    }
}

বীজডাটা ক্লাসের কাজ হ'ল ডাটাবেস সারণিতে প্রাথমিক তথ্য যুক্ত করা। এটির কোডটি হ'ল:

public static void EnsurePopulated(IApplicationBuilder app)
    {
        ApplicationDbContext context = app.ApplicationServices.GetRequiredService<ApplicationDbContext>();
        context.Database.Migrate();
        if (!context.Products.Any())
        {
            context.Products.AddRange(
            new Product
            {
                Name = "Kayak",
                Description = "A boat for one person",
                Category = "Watersports",
                Price = 275
            },
            ....
            );
            context.SaveChanges();
        }
    }

সমাধান

মাইগ্রেশন করার আগে স্টার্টআপ.সি ফাইলগুলিতে কেবল বীজডাটা ক্লাসের কলিংয়ের জন্য মন্তব্য করুন।

// SeedData.EnsurePopulated(app);

এটি আমার সমস্যার সমাধান করে এবং আশা করে যে আপনার সমস্যাটিও একইভাবে সমাধান হয়ে গেছে।


1

আমি একই সমস্যা মধ্যে দৌড়ে। সমাধানে আমার দুটি প্রকল্প রয়েছে। যেটি

  1. এপিআই
  2. পরিষেবা এবং রেপো, যা প্রসঙ্গের মডেল ধারণ করে

প্রাথমিকভাবে, এপিআই প্রকল্পটি স্টার্টআপ প্রকল্প হিসাবে সেট করা হয়েছিল।

প্রারম্ভিক প্রকল্পটিকে আমি প্রবন্ধের ক্লাসগুলিতে পরিবর্তন করেছি classes আপনি যদি ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন তবে আপনি একটি প্রকল্প স্টার্টআপ প্রকল্প হিসাবে সেট করতে পারেন:

ওপেন সলিউশন এক্সপ্লোরার >> প্রসঙ্গ প্রকল্পে ডান ক্লিক করুন >> প্রারম্ভিক প্রকল্প হিসাবে সেট নির্বাচন করুন


1

প্রথমে নিশ্চিত হয়ে নিন যে আপনি নিজের ডাটাবেসটি কনফিগার করেছেন Startup.cs আমার ক্ষেত্রে, আমি এই ত্রুটিটি পাচ্ছিলাম যেহেতু আমি নীচেটি নির্দিষ্ট করে নিStartup.cs

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("<Your Project Assembly name where DBContext class resides>")));

1

এএসপি.নেট কোর 3.1 এবং সত্ত্বা ফ্রেম ওয়ার্ককোর 3.1.0 ব্যবহার করে। কেবলমাত্র প্যারামিটারলেস কনস্ট্রাক্টর দিয়ে প্রসঙ্গ শ্রেণীর অনকনফিগরিং ওভাররাইড করা

```protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
               .SetBasePath(Directory.GetCurrentDirectory())
               .AddJsonFile("appsettings.json")
               .Build();
            var connectionString = configuration.GetConnectionString("LibraryConnection");
            optionsBuilder.UseSqlServer(connectionString);
        }
    }
```

1

আমি ত্রুটির মুখোমুখি হয়েছি

"'মাই কনটেক্সট' টাইপের কোনও অবজেক্ট তৈরি করতে অক্ষম the প্রকল্পে 'আইডিজাইনটাইমডিবিবিসন্টেক্সট্যাক্ট্রি' এর একটি প্রয়োগ যুক্ত করুন, বা https://go.microsoft.com/fwlink/?linkid=851728 দেখুন ডিজাইনের সময় সমর্থিত অতিরিক্ত নিদর্শনগুলির জন্য " "

এভাবেই আমার সমস্যার সমাধান হয়েছিল। আপনি যখন আপনার সমাধান ডিরেক্টরিতে থাকবেন তখন নীচের কমান্ডটি চালান

 dotnet ef migrations add InitialMigration --project "Blog.Infrastructure" --startup-project "Blog.Appication"

এখানে অ্যাপ্লিকেশন হ'ল আমার স্টার্টআপ প্রকল্প যা স্টার্টআপ.সি ক্লাস এবং ইনফ্রাস্ট্রাকচার আমার প্রকল্প যা ডিবিকন্টেক্সট ক্লাসযুক্ত।

তারপরে একই কাঠামোটি ব্যবহার করে আপডেট চালান।

dotnet ef database update --project "Blog.Infrastructure" --startup-project "Blog.Application"

0

আমি পুরানো- মাইক্রোসফ্ট.অন্টিটি ফ্রেমওয়ার্ককোর.টুলস.ডটনেট উল্লেখ করার পরে আমি একই সমস্যা পেয়েছি

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />

নতুন সংস্করণে আপগ্রেড করার পরে এটি সমাধান হয়ে যায়


0

মূল প্রকল্পের অ্যাপসেটেটিংস.জসন ফাইলে আমি "অনুলিপি সর্বদা অনুলিপি" করতে 'অনুলিপিতে আউটপুট ডিরেক্টরিতে' সেট করেছিলাম এবং এটি কাজ করে।


0

.NET কোর কনসোল অ্যাপ্লিকেশনগুলির জন্য নমুনা ডিবি প্রসঙ্গ শ্রেণি

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace EmailServerConsole.Data
{
    public class EmailDBContext : DbContext
    {
        public EmailDBContext(DbContextOptions<EmailDBContext> options) : base(options) { }
        public DbSet<EmailQueue> EmailsQueue { get; set; }
    }

    public class ApplicationContextDbFactory : IDesignTimeDbContextFactory<EmailDBContext>
    {
        EmailDBContext IDesignTimeDbContextFactory<EmailDBContext>.CreateDbContext(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
            var builder = new DbContextOptionsBuilder<EmailDBContext>();
            var connectionString = configuration.GetConnectionString("connection_string");
            builder.UseSqlServer(connectionString);
            return new EmailDBContext(builder.Options);
        }
    }
}

যদিও এটি লেখকদের প্রশ্নের উত্তর দিতে পারে, এতে কিছু ব্যাখ্যাকারী শব্দ এবং ডকুমেন্টেশনের লিঙ্কের অভাব রয়েছে। কাঁচা কোড স্নিপেটগুলি এর চারপাশে কিছু বাক্যাংশ ব্যতীত খুব বেশি কার্যকর নয়। আপনি কীভাবে একটি ভাল উত্তর লিখতে পারেন তা খুব সহায়ক। আপনার উত্তর সম্পাদনা করুন।
হেলো

0

আপনি কনফিগারেশনে জেসন ফাইল (যেখানে সংযোগের স্ট্রিং রয়েছে) যুক্ত করতে স্টার্টআপ ক্লাস কনস্ট্রাক্টর ব্যবহার করতে পারেন। উদাহরণ:

    IConfigurationRoot _config;
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json");

        _config = builder.Build();
    }

0

আমার জন্য তা ছিল কারণ আমি পরিবর্তন Output Typeথেকে আমার প্রারম্ভে প্রকল্পের Console Applicationজন্যClass Library

প্রত্যাবর্তন করা হচ্ছে Console Applicationকৌতুক করেনি।


0

আমি একটি সমাধান আছে যে এই সমস্যা ছিল:

  • একটি। নেট কোর ২.২ এমভিসি প্রকল্প
  • একটি। নেট কোর 3.0 ব্লেজার প্রকল্প
  • .NET স্ট্যান্ডার্ড 2.0 শ্রেণির গ্রন্থাগার প্রকল্পের ডিবি প্রসঙ্গ

ব্লেজার প্রকল্পটি স্টার্ট আপ প্রকল্প হিসাবে সেট করা থাকলে আমি "অবজেক্ট তৈরি করতে অক্ষম ..." বার্তাটি পাই তবে এমভিসি প্রকল্পটি স্টার্টআপ প্রকল্প হিসাবে সেট করা থাকলে তা নয়।

এটি আমার ধাঁধা দেয়, কারণ প্যাকেজ ম্যানেজার কনসোলে (যা আমি স্থানান্তর তৈরি করছি সেখানে) আমি ডিফল্ট প্রকল্পটি একটি সি # শ্রেণির লাইব্রেরিতে সেট করি যা আসলে ডিবি প্রবন্ধ থাকে এবং আমি এতে ডিবি প্রসঙ্গটিও নির্দিষ্ট করে দিই অ্যাড-মাইগ্রেশন করার জন্য আমার কল add-migration MigrationName -context ContextName, সুতরাং এটি আশ্চর্যজনক মনে হয় যে ভিজ্যুয়াল স্টুডিও বর্তমানে স্টার্টআপ প্রকল্পটি কী সেট করেছে তা যত্নশীল করে তোলে।

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

কারণ যাই হোক না কেন, স্টার্টআপ প্রকল্পটি এমভিসি প্রকল্পে পরিবর্তিত করা হয়েছে যা ব্লার প্রকল্পের পরিবর্তে কোর ২.২ লক্ষ্যবস্তু করেছে, সমস্যাটি স্থির করেছে


0

আমার জন্য সমস্যাটি ছিল আমি ভুল প্রকল্পের মধ্যে মাইগ্রেশন কমান্ডগুলি চালাচ্ছিলাম। প্রোজেক্টের ভিতরে থাকা কমান্ডগুলি চালনা করা যাতে DBContext থাকা প্রকল্পের চেয়ে স্টার্টআপ.সি থাকে আমাকে এই বিশেষ সমস্যাটি পেরিয়ে যাওয়ার অনুমতি দেয়।


0

আমার ক্ষেত্রে স্টার্টআপ প্রকল্পটি ইন ইন টিতে সহায়তা করে। এক্সিকিউট করে আপনি এটি করতে পারেন

dotnet ef migrations add init -s ../StartUpProjectName

-4

আমারও একই সমস্যা ছিল সবেমাত্র ap.jason এপ্লিকেশন.জাসনে পরিবর্তন করে এটি সমস্যার সমাধান করেছে

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