1, 安装sql server compact edition 4 sp1 Runtime
2, 安装sql server ce tool box for to Management or create local DB.
http://sqlcetoolbox.codeplex.com/
3, 以往的 Entity Framework 操作方式也不一樣了,先上 NuGet 取得 Entity Framework.SqlServerCompact
Code First with SQL CE a sample project using Entity Framework 6 with code first.
http://www.codeproject.com/Articles/680116/Code-First-with-SQL-CE
Entity Framework 6 & SQL Server Compact
http://dotnet.dzone.com/users/erikej
重要提示:配置文件中 configSections 要在 connectionStrings 节下面,不然会报错。
1 <system.data> 2 <DbProviderFactories> 3 <remove invariant="System.Data.SqlServerCe.4.0" /> 4 <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> 5 </DbProviderFactories> 6 </system.data> 7 <connectionStrings> 8 <add name="ProductContext" connectionString="Data Source=MyDB.sdf" providerName="System.Data.SqlServerCE.4.0"/> 9 <!--<add name="sqliteContext" 10 connectionString="Data Source=E:\WHPCodeLiberary\temp\SqlLiteDBs\TestDB.s3db;Version=3;New=True;" 11 providerName="System.Data.SQLite" 12 />--> 13 </connectionStrings>
重要提示:配置文件中 configSections 要在 connectionStrings 节下面,不然会报错。
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <connectionStrings> <add name="CFSqlCe.Dal.DvdContext" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=D:\DvdDatabase.sdf" /> </connectionStrings> <entityFramework> <providers> <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> </providers> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> <parameters> <parameter value="System.Data.SqlServerCe.4.0" /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>
public class Category { public string CategoryId { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { public int ProductId { get; set; } public string Name { get; set; } public string CategoryId { get; set; } public virtual Category Category { get; set; } }
1 /// <summary> 2 /// 4.create context 3 /// </summary> 4 public class ProductContext : DbContext 5 { 6 public DbSet<Category> Categories { get; set; } 7 public DbSet<Product> Products { get; set; } 8 9 protected override void OnModelCreating(DbModelBuilder modelBuilder) 10 { 11 modelBuilder.Entity<Product>().Property(s => s.Name).IsRequired(); 12 } 13 } 14 15 class Program 16 { 17 static void Main(string[] args) 18 { 19 Database.SetInitializer<ProductContext>(new DropCreateDatabaseIfModelChanges<ProductContext>()); 20 21 using (var db = new ProductContext()) 22 { 23 var food = db.Categories.Find("FOOD"); 24 if (food == null) 25 { 26 food = new Category { CategoryId = "FOOD", Name = "Foods" }; 27 db.Categories.Add(food); 28 } 29 Console.Write("Please enter a name for a new food: "); 30 var productName = Console.ReadLine(); 31 var product = new Product { Name = productName, Category = food }; 32 db.Products.Add(product); 33 34 35 36 int recordsAffected = db.SaveChanges(); 37 38 Console.WriteLine("Save {0} entities to the database,press any key to exit.", recordsAffected); 39 var allFoods = from p in db.Products 40 where p.CategoryId == "FOOD" 41 orderby p.Name 42 select p; 43 44 foreach (var item in allFoods) 45 { 46 Console.WriteLine("- {0}", item.Name); 47 } 48 Console.ReadKey(); 49 } 50 } 51 }