5

EntityFrameworkCore.SqlServer 2.0 ile asp. Net core wep api 2.0 uygulama geliştirdik. Veri tabanı ilk yaklaşımı kullanılarak geliştirilmiştir. Dbcontext uygulamasını kullanarak varlıklara erişmeye çalışırken kırılma moduna geçecek. Başvuru durumunun kırılma durumuna gitme nedenini bulamıyorum. Lütfen bu sorunu çözmeye yardımcı olun.Uygulama arası erişim dbcontext, ASP.NET çekirdek web api 2.0 varlık çerçeve çekirdek 2.0 veritabanı ilk yaklaşımı ile erişim

DBContext sınıfında OnConfiguring yöntemi aşağıdadır. Kontrol ünitesinde DBContext varlıkları erişmek için kullanılan kod bloğu Aşağıda

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     if (!optionsBuilder.IsConfigured) 
     { 
      optionsBuilder.UseSqlServer(@"Server=(local);Database=VotingAppDB;User ID=sa;Password=123;"); 
     } 
    } 

// GET api/values 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     VotingAppDBContext context = new VotingAppDBContext(); 
     var questions = context.Questions.ToList(); 
     return new string[] { "value1", "value2" }; 
    } 

Installed packages

tüm

Application error

+0

Sorunum var. Şimdiye kadar nasıl tamir edeceğimi bilmiyorum. – hidden

+0

veritabanınızın şemaları var mı? Şemalarımı kaldırdığımda ve iskeledeyken çalışmaya başladı. – hidden

+0

Sorunumu buldum. Sütun uzunluğunu tanımlamak için VARCHAR (max) kullanmıştım. Bazıları bunu anlamıyor ve sessizce – hidden

cevap

1

1.- Önce denetleyici içinde bir bağlam oluşturmamalıdır bağımlılıkları ile 'yeni' kullanmaktan kaçının çünkü bu kodunuzu ölçülebilir hale getirecektir, benim UnitOfWork kullandığım durumda IUnitOfWork instan olarak enjekte ediyorum ce, gerçekten, MyConext bir uzantısıdır ve bunu StartUp sınıfı içine enjekte edersiniz ... Bunu yapmak için özel bir yöntem (bunu tek bir özel aramada gerçekleştirmek için) gibi görünen:

özel void AddEntityFrameworkAndDbContext (IServiceCollection hizmetleri) { services.AddEntityFrameworkSqlServer();

 var migrationsAssemblyName = typeof(MyContext).GetTypeInfo().Assembly.GetName().Name; 
     services.AddDbContext<MyContext>(options => 
     { 
      options.UseSqlServer(
       "MY CONNECTION STRING GOES HERE (BUT I RETREIVE IT FROM ANOTHER SERVICE)", 
       sqlServerOptionsAction: sqlOptions => 
       { 
        sqlOptions.MigrationsAssembly(migrationsAssemblyName); 
        sqlOptions.EnableRetryOnFailure(maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); 
       }); 
     }, 
     ServiceLifetime.Scoped // Showing explicitly that the DbContext is shared across the HTTP request scope (graph of objects started in the HTTP request) 
       ).AddUnitOfWork<MyContext>(); // This is because I'm also using EF Core Unit of work NuGet Package 
    } 

ben

 // Add EF, and UoW 
     AddEntityFrameworkAndDbContext(services); 

2.- İkincisi Başlangıç ​​sınıfında, söylediği gibi ConfigureServices (IServiceCollection hizmetleri), (gelen özel yöntem ama bu olduğunu söyleyebilirim olduğunu arıyorum senin asıl sorun) Cevapsız tablonuzu kaçırdığınızı söyleyebilirim.OnConfiguring (options); How to setup EF6 Migrations with ASP.NET Core

Ayrıca, UnitOfWork proje bir okuma hak ettiğini, bir atın:

Ayrıca
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     if (!optionsBuilder.IsConfigured) 
     { 
      optionsBuilder.UseSqlServer(@"Server=(local);Database=VotingAppDB;User ID=sa;Password=123;"); 
     } 
     base.OnConfiguring(optionsBuilder); 
    } 

, ben birkaç hafta önce yazdığı bu cevap bir göz atın: sevdiği bağlamda, olması gerektiği burada bakmak: Ben yardımcı olur umarım https://github.com/arch/UnitOfWork

,

Juan

0

değil sur e eğer sorun hala mevcutsa. Bugün aynı sorunu yaşadım. Düzeltme, tüm nuget paketlerini (benim durumumda, Microsoft.Extensions.Configuration, vb.) En son sürüme güncellemekti.

+0

Benim durumumda, kendini referans yapan birincil anahtardan kaynaklanıyor. Bu referansı kaldırdığımda işe yaradı. –

-1

Bu, şemanızda kendini referans veren birincil anahtara sahip olduğunuzda oluşur. Sql server veritabanı şemasını kullanarak bunu grafik olarak görüntüleyebilirsiniz. Bunu çözmek için bu referansı kaldırmanız gerekir.

İlgili konular