2015-10-28 17 views
5

Ben bir asp.net 5 konsol örnek uygulama yazıyorum ve benim arka uç konuşmak Entity Framework 7 kullanmak istiyorumEF7 nasıl kullanılır ve ASP.NET 5 Beta 8 konsol uygulamasında startup.cs olmadan SQL Server'a nasıl bağlanılır?

Sorun. Bir web uygulaması bunu nasıl biliyorum ama startup.cs ama main.cs kullanmadığınız zamanlarda bir konsol uygulaması için bunu gerçekleştirmek için nasıl kayboldum.

bir web uygulamasında Kod

, sen startup.cs aşağıdaki kodu olurdu: Burada

public void ConfigureServices(IServiceCollection services) 
{ 
    var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;"; 

    services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<BloggingContext>(options => options.UseSqlServer(connection)); 
} 

hizmetlerin entityframework7 ve SQL Server kullanılan bağlantı dizesi için yapılandırılmış olan var. Ben GitHub'dan, Google ve Bing baktım ama sadece EF7 ile web uygulamaları için örnek proje ve kod bulduk

deneyin. EF7'yi konsol uygulaması ile tartışan bir belge bulamadım.

Yukarıdaki kod yazmak istiyorum, ama bu benim konsol uygulaması için benim main.cs var. Açıkçası main.cs aşağıdaki ile, başarıyı olmadı:

SampleConsoleDbContext scab = new SampleConsoleDbContext(); 

Bu bağlamda örneği almak için doğru yolu ona bağlantı dizesi ve hala şüphelerim var ya benim programını anlatmaya imkan yok main.cs da.

Bu ilginç sorunla ilgili yardım, tavsiye veya yorum seviniriz. Teşekkür ederim.

cevap

2

heavyd'da bunun birçoğu gerekli değildir ve sadece DI'yi kurmak için, aynı zamanda kodu nasıl okuduğumu, yanlış olabileceğini söyledi. Basit do olabilir bağlantı dizesi ayarlayarak gelince

:

var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;"; 

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection); 

bağlamına bağlantı dizesini geçmektedir.

bunu istediğiniz kadar soyutlayabilirsiniz, ancak bağlantı dizesini bağlamın örneğine nasıl ileteceğiniz budur.

+0

Bu benim belirli bir kullanım durumunuz cevap ve cevap o bahsettiğim EF7 bağlantısında bulunan kod ile eşleşen verildiği gibi ben olarak heavyd için. Bence hem zamanın hem de yardımın için. Hala biraz sert olsa bile yeni ef7 belgelerini bulmak çok güzeldi. :) – hlyates

7

Microsoft aslında satır içi OnConfiguring yöntemini geçersiz kılarak Entity Framework için onların numunesinden 7.

sadece bağlamın yapılandırmasını yapabilirsiniz documentation inşa etmeye başlamıştır:

public class BloggingContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder builder) 
    { 
     builder.UseSqlServer(@"<connection string>"); 
    } 
} 

Sonra yapabilirsiniz sadece Main daki bağlamda örneklerini oluşturmak: ASP.NET örneklerde

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var db = new BloggingContext()) 
     { 
      db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); 
      var count = db.SaveChanges(); 
      Console.WriteLine("{0} records saved to database", count); 

      Console.WriteLine(); 
      Console.WriteLine("All blogs in database:"); 
      foreach (var blog in db.Blogs) 
      { 
       Console.WriteLine(" - {0}", blog.Url); 
      } 
     } 
    } 
} 

,çağrıları, EF'in ASP.NET'in geri kalanıyla aynı Hizmet Sağlayıcısını (düşün bağımlılık enjeksiyonunu) kullanmasına izin vermektir (bu, EF'nin ASP.NET'in kullandığı aynı günlüğe kaydedicilerini alacağı anlamına gelir). Ancak, bu kalıbı takip etmek istemiyorsanız, yukarıda gösterilen yaklaşımı kullanabilirsiniz.

+1

Cevabınız için teşekkür ederiz. Farkında olmadığım yeni bir bağlantı ve cevabını bastım. Dün gece kendime özel bir kod buldum: https://github.com/aspnet/EntityFramework/wiki/Configuring-a-DbContext – hlyates

+0

UseSqlServer kullanılamıyor, belirli bir montaj eklemeniz gerekmiyor mu? –

+0

@ Kris-I Microsoft.EntityFrameworkCore kullanarak '' 'Microsoft.EntityFrameworkCore.SqlServer'' paketinden [Bakınız here] (http://stackoverflow.com/a/39275251/94928) ve [docs] (https: // docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.sqlserverdbcontextoptionsextensions#Microsoft_EntityFrameworkCore_SqlServerDbContextOptionsExtensions_UseSqlServer_Microsoft_EntityFrameworkCore_DbContextOptionsBuilder_System_String_System_Action_Microsoft_EntityFrameworkCore_Infrastructure_SqlServerDbContextOptionsBuilder__) – heavyd

İlgili konular