2013-12-13 23 views
6

'da SQL Server Compact ile başlatılamadı Visual Studion 2013 Express for Web'de ASP.Net MVC şablonunu kullanarak basit bir proje oluşturdum. Herhangi bir kimlik doğrulama kullanmaz. Sonra EntityFramework (v6.0.1), EntityFramework.SqlServerCompact paketlerini kurdum. Gerçek bağlam nesnesi Çalışma sınıfının Birimi oluşturulurDbContext, ASP.Net MVC

public class EditTestContext : DbContext 
{ 
    public EditTestContext() : base("EditTestContext") 
    { 
    } 

    public EditTestContext(string connectionString) : base(connectionString) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Database.SetInitializer(
         new DropCreateDatabaseIfModelChanges<EditTestContext>()); 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     modelBuilder.Configurations.Add(new EditTestConfig()); 
    } 
} 

:

Benim DBContext sınıf çok basit bağlantı dizesi kullanılan

public class EditTestUoW:IEditTestUoW,IDisposable 
{ 
    private DbContext dbContext; 

    public EditTestUoW() 
    { 
     CreateDbContext(); 
    } 

    private void CreateDbContext() 
    { 
     dbContext = new EditTestContext();//NEW DBCONTEXT OBJECT IS CREATED 
     dbContext.Configuration.LazyLoadingEnabled = false; 
     dbContext.Configuration.ProxyCreationEnabled = false; 
     dbContext.Configuration.ValidateOnSaveEnabled = false; 
    } 

    public IRepository<EditTestModel> EditTestRepo 
    { 
     get 
     { 
      return new EFRepository<EditTestModel>(dbContext); 
     } 
    } 
} 

geçerli:

<add name="EditTestContext" connectionString="Data Source= 
    |DataDirectory|EditTestDb.sdf;Max Database Size=256; 
    Max Buffer Size=1024;File Mode=Shared Read; 
    Persist Security Info=False;" providerName="System.Data.SqlServerCe.4.0" /> 

Bu bağlamı kullanarak herhangi bir şeye erişmeyi denediğimde:

var rep=UoW.EditTestRepo; 
var list=rep.GetAll().ToList(); 

Ben rep.GetAll() fonksiyonu üzerine aşağıdaki özel alıyorum:

iletisi: Sıra Veri Havuzu sınıftan IQueryable, derin kazma üzerinde eşleşen elemanı

içerir (DbSet<EditTest>) şu istisna atıyor:

The context cannot be used while the model is being created. This exception may 
be thrown if the context is used inside the OnModelCreating method or if the same 
context instance is accessed by multiple threads concurrently. Note that instance 
members of DbContext and related classes are not guaranteed to be thread safe. 

neden olabileceğini düşündüm 10, ama çıkardıktan sonra hala var.

Burada yanlış olan ya da bir şey (bazı montaj başvuruları vb.) Eksik mi?

cevap

11

Sorunla ilgili başka bir aramadan sonra, this MSDN forumu linkini aldım. Rowan önerdiği gibi, elle benim EFRepository sınıfta şu ifadeyi kullanarak içeriği başlatmak için çalıştı: o GetAll() yöntemi isabet önce

dbContext.Database.Initialize(false); 

uygulama yolu başarısız oldu. Sonra DbProviderManifestExtensions.GetStoreTypeFromName ararken

[InvalidOperationException: Sequence contains no matching element] 
    System.Linq.Enumerable.Single(IEnumerable`1 source, Func`2 predicate) +2614017 
    System.Data.Entity.Utilities.DbProviderManifestExtensions.GetStoreTypeFromName 
         (DbProviderManifest providerManifest, String name) +146 
    .....Other Lines..... 
    System.Data.Entity.Internal.InternalContext.Initialize() +31 
    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType 
                  (Type entityType) +38 
    System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +138 
    System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +38 
    System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable 
         .get_Provider() +99 
    System.Linq.Queryable.Any(IQueryable`1 source) +50 

bu EF sütun türünü almaya çalışıyordu çizgi olduğunu ortaya koymuştur: Ama bu bana biraz yön verdi yığın izini teşhir etti. Benim Kimliği sütun için UNIQUEIDENTIFIER belirtilen vardı: Ben bu yorumladı kez

Property(x=> x.Id).HasColumnType("UNIQUEIDENTIFIER") 

, tüm iyi oldu.

yoktur rağmen kolon tipi veritabanı sağlayıcısı geçerli değil durumunda uygun hata mesajını sunmak amacıyla request Codeplexüzerinde. Aklımı saklıyorum!

+0

Bunun için deliriyordum! – wilver

+0

SQL CE ile "Property (d => d.BTCValue) .HasPrecision (24, 8)" yöntemini çağırdığımda aynı özel durum vardı. Sebebini yaptığınız için teşekkürler! – Andras

+0

tarih, smalldate ve metin de iyi uymuyor gibi görünüyor –