Entity Framework Code First for SQL Compact


這篇博客將介紹EF Code First中如何使用SQL Compact。SQL Compact是微軟推出的免費的關系型數據庫,目前最新版本是SQL Compact 4.0。微軟的開發工具VS 2010/SQL Server 2008及后續版本中均不帶有SQL Compac 3.5/4.0t數據庫查看工具。不過CodePlex上有一個SqlCeToolbox的工具非常不錯。有點兒像精簡版的SQL Server Management Studio。

SQL Compact可以用於以下的一些場景,例如在WindowPhone的應用,桌面程序等(當然也可以使用Sqlite)。下面通過一個例子介紹如何使用EF Code First生成SQL Compact數據庫。

1. 在程序中引用Entity Framework for SQL Compact相關DLL,可以通過Nuget,命令:PM> Install-Package EntityFramework.SqlServerCompact (注意如果需要生成SQL Compact 3.5,Nuget命令:Install-Package EntityFramework.SqlServerCompact.Legacy)

2. 項目結構:Models中存放的是數據庫實體類(Actor.cs/FilmActorRole.cs/FilmGenere.cs/FilmTitle.cs/Producer.cs/Role.cs),Context中存放數據庫上下文(DvdContext.cs)。因為是一個Demo,就把這些放在一個工程下面。在真實項目中,建議把Models/Context分別放在不同的類庫中,這樣便於維護,程序的結構也更加清晰。

下面展示一下FilmActorRole類,程序中使用EntityFramework DataAnnotations的方式來描述Model類,

    [Table("FilmActorRole")]
    public class FilmActorRole
    {
        [Key]
        public int Id { get; set; }

        [Required]
        public int FilmTitleId { get; set; }

        [ForeignKey("FilmTitleId")]
        public FilmTitle FileTitle { get; set; }

        [Required]
        public int ActorId { get; set; }

        [ForeignKey("ActorId")]
        public Actor Actor { get; set; }

        [Required]
        public int RoleId { get; set; }

        [ForeignKey("RoleId")]
        public Role Role { get; set; }

        [Required]
        [StringLength(255)]
        public string Character { get; set; }

        [Required]
        [StringLength(1024)]
        public string Description { get; set; }
    }

關於EntityFramework DataAnnotations的內容,請參考:https://msdn.microsoft.com/en-us/data/jj591583.aspx

DvdContext.cs

    public class DvdContext : DbContext
    {
        public DbSet<Actor> Actors{ get; set; }

        public DbSet<FilmActorRole> FilmActorRoles { get; set; }

        public DbSet<FilmGenere> FilmGeneres { get; set; }

        public DbSet<FilmTitle> FilmTitles { get; set; }

        public DbSet<Producer> Producers { get; set; }

        public DbSet<Role> Roles { get; set; }

        public DvdContext()
            :base("DvdConnectionString")
        {

        }
    }

在App.config中需要配置DvdConnectionString,

  <connectionStrings>
    <add name="DvdConnectionString" connectionString="Data source=|DataDirectory|DvdDatabase.sdf;" providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>

上面的配置文件中有一個DataDirectory,這表示數據庫存放的目錄。通常情況下會把數據庫放置在一個特殊位置,例如用戶文件夾下,這樣在程序卸載時不會被刪除掉。我們需要在程序啟動時,設置DataDirectory,例如:

        static void Main(string[] args)
        {
            // 設置Database的位置:
            AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
        }

下面看如何生成當前數據庫:

    using (DvdContext db = new DvdContext())
    {
        if(!db.Database.Exists())
        {
            db.Database.Create();
        }
    }

我們可以使用LINQ的方式對數據庫進行增刪改查操作。

感謝您的閱讀,代碼點擊這里下載。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM