最新版的EF Core對UWP支持的怎么樣


為啥寫這篇帖子呢?其實是因為翻微軟的文檔中心偶然翻到的,於是就出於好奇就試試了,看看用着怎么樣。

以前沒注意圖片,所以我今天發現的時候,顯示EF Core3.1支持standard2.0,於是就想試試UWP用着會不會出問題,之前有的網友說2.1的standard目前UWP用不了。

ef core具體用法 文檔中心都有文檔教程,首先是先創建一個 Standard2.0的項目,然后創建一個數據上下文,和一些模型。

dotnet控制台項目使用ef core的使用方法。

上面的帖子是官方的使用方法,下圖是我的項目的,和大多數網友的沒什么區別。

standard項目名字叫EFcore就是創建了model 類,和一個上下文,必裝的包如下:

Microsoft.EntityFrameworkCore.Sqlite 這個包,個人理解應該是主要用來連接數據庫的,可以被UWP項目引用進而操作數據庫。

然后我們需要一個dotnet core的控制台程序,用來創建遷移和執行遷移,要是用過asp.net core的大家都知道 其實用ef core很方便,一個項目就可以創建遷移和執行遷移。

上圖左邊的圖上我們是給文件路徑傳了一個路徑,等會再說為什么給個路徑,右邊就是多裝了一個庫Microsoft.EntityFrameworkCore.Tools,這個主要是執行遷移指令的。下圖就是在包管理控制台執行遷移指令

Add-Migration InitialCreate 這個是創建數據庫的表的骨架

Update-Database 這就是把表給生成 文檔中心都有寫

控制台程序設為啟動程序,包管理那里默認項目為standard項目,上面做完把控制台程序執行完都很正常,說明基礎已經做好。然后新建個uwp項目,用來測試uwp使用會不會出問題。

圖上是有報錯,報錯提示不能打開數據庫文件,去git上找了原因是因為,在數據庫上下文寫的數據庫文件名不是絕對路徑,所以會導致找不到數據庫,然后改了代碼以后,發現正常了。

 protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            var dbFile = await ApplicationData.Current.LocalFolder.TryGetItemAsync("blogging.db") as StorageFile;
            if (null == dbFile || SystemInformation.IsFirstRun)
            {
                // first time ... copy the .db file from assets to local  folder
                var localFolder = ApplicationData.Current.LocalFolder;
                var originalDbFileUri = new Uri("ms-appx:///Assets/blogging.db");
                var originalDbFile = await StorageFile.GetFileFromApplicationUriAsync(originalDbFileUri);
                if (null != originalDbFile)
                {

                    dbFile = await originalDbFile.CopyAsync(localFolder, "blogging.db", NameCollisionOption.ReplaceExisting);

                }
            }
            try
            {
                using (var db = new BloggingContext())
                {
                    //這里是傳絕對路徑給的數據上下文
                   db.DbFilePath = dbFile.Path;
                    db.Database.Migrate();
                    //// Create
                    db.Add(new Blog { Url = "http://blogs.msdn.com/adonet", TestUrl = "http://blogs.msdn.com/adonet" });
                    db.SaveChanges();
                    // Read
                    var blog = db.Blogs
                        .OrderBy(b => b.BlogId)
                        .ToList().Select(b => b.TestUrl);
                    SQLite.ItemsSource = blog;
                }
            }
            catch (Exception ex)
            {

            }

        }

具體好像就發現這一點和以前使用的區別,其他的好像都正常使用。下圖的listview上半部分為什么沒數據呢?是因為我測試了db.Database.Migrate();能不能正常遷移表新添的字段。所以上面的舊字段沒值而已。

得出結論,對UWP支持還算良好,目測以后的大一統時代各種支持應該會更好,所以UWP應該算是沒死掉的。

項目代碼和參考的博客文章如下:有說的不對的請大家予以批評

博客項目代碼地址

參考博客地址

有啟發的git討論地址

如果轉載請注明出處(前提有人願意轉載😅)


免責聲明!

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



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