欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# DataDirectory的用法

 更新時間:2020年08月07日 14:45:24   作者:cnxy  
這篇文章主要介紹了c# DataDirectory的用法,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下

筆者在使用Entity Framework中的Scaffolding機制自動創(chuàng)建拓展名為mdf的數(shù)據(jù)庫及表單時,遇到如下的錯誤:

A file activation error occurred.
The physical file name '\\MusicDBContext.mdf' may be incorrect.
Diagnose and correct additional errors, and retry the operation.
CREATE DATABASE failed. Some file names listed could not be created.
Check related errors.

首先回顧一下創(chuàng)建這個程序的步驟:

1、創(chuàng)建一個Console控制臺應(yīng)用程序,程序集名稱及命名空間為ConsoleApp;

2、使用程序包控制臺管理器將Entity Framework包含到此程序中,代碼如下:

PM> install-package Entity Framework

3、在App.Config文件中將以下內(nèi)容插入到configuration節(jié)點:

<connectionStrings>
  <add name="MusicDBContext"
    connectionString="Data Source=(LocalDb)\MSSQLLocalDB;
     Initial Catalog=MusicDBContext;Integrated Security=SSPI;
     AttachDBFilename=|DataDirectory|\MusicDBContext.mdf"
    providerName="System.Data.SqlClient" />
</connectionStrings>

4、在控制臺編寫以下代碼:

using System;
using System.Linq;
using System.Data.Entity;
namespace ConsoleApp
{
  class Program
  {
    static void Main(string[] args)
    {
      try
      {
        MusicDbContext db = new MusicDbContext();
        Music music = new Music { Title = "Far Away From Home", 
                     ReleaseDate = DateTime.Now };
        db.Musics.Add(music);
        db.SaveChanges();
        db.Musics.ToList().ForEach(x => Console.WriteLine($"{x.ID},
                        {x.Title},{x.ReleaseDate}"));
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
        if(ex.InnerException != null)
        {
          Console.WriteLine(ex.InnerException.Message);
        }
      }
      Console.ReadKey();
    }
  }
  public class Music
  {
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { set; get; }
  }
  public class MusicDbContext : DbContext
  {
    public MusicDbContext() : base("MusicDBContext") { }
    public DbSet<Music> Musics { set; get; }
  }
}

5、運行此程序,發(fā)現(xiàn)程序不能按自己想要的結(jié)果運行,出現(xiàn)在最前面出現(xiàn)的錯誤。

通過查看出錯的信息,發(fā)現(xiàn)

AttachDBFilename=|DataDirectory|\MusicDBContext.mdf

有問題,而這又是沒有問題的,這到底是怎么回事?為什么會出現(xiàn)錯誤?

于是,通過MSDN查找相關(guān)資料,通過以下方法獲得DataDirectory指定的路徑是什么:

object path = AppDomain.CurrentDomain.GetData("DataDirectory");

運行此行代碼,發(fā)現(xiàn)path居然是null!?。∈裁??一般控制臺或者Windows Form程序根據(jù)是Debug還是Release決定DataDirectory的初始化路徑為Bebug文件夾還是Release文件夾嗎?

這個錯了。

如果原先的Bebug文件夾或Release文件夾存在數(shù)據(jù)庫文件,使用類似"AttachDBFilename=|DataDirectory|\MusicDBContext.mdf"的寫法是沒有問題的,

即使path = null,它也知道是在Bebug文件夾或Release文件夾下。

如果原先的Bebug文件夾或Release文件夾不存在數(shù)據(jù)庫文件,上面的寫法就有問題,也就會出現(xiàn)最開始出現(xiàn)的那種錯誤。

那么,我們該如何解決呢?細心的人可以發(fā)現(xiàn),既然可以使用AppDomain.CurrentDomain.GetData來獲得DataDirectory指定的路徑,

那及可以使用AppDomain.CurrentDomain.SetData來指定DataDirectory的初始化路徑,代碼如下:

AppDomain.CurrentDomain.SetData("DataDirectory", Environment.CurrentDirectory);

通過以上的方法,就可以解決最開始前面的問題。

通過以上的介紹,最終的代碼修改如下:

using System;
using System.Linq;
using System.IO;
using System.Data.Entity;

namespace ConsoleApp
{
  class Program
  {
    static void Main(string[] args)
    {
      string dbPath = Environment.CurrentDirectory + @"\MusicDBContext.mdf";
      if(!File.Exists(dbPath))
      {
        AppDomain.CurrentDomain.SetData("DataDirectory", Environment.CurrentDirectory);
      }
      try
      {
        MusicDbContext db = new MusicDbContext();
        Music music = new Music { Title = "Far Away From Home", ReleaseDate = DateTime.Now };
        db.Musics.Add(music);
        db.SaveChanges();
        db.Musics.ToList().ForEach(x => Console.WriteLine($"{x.ID},{x.Title},{x.ReleaseDate}"));
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
        if(ex.InnerException != null)
        {
          Console.WriteLine(ex.InnerException.Message);
        }
      }
      Console.ReadKey();
    }
  }

  public class Music
  {
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime ReleaseDate { set; get; }

  }

  public class MusicDbContext : DbContext
  {
    public MusicDbContext() : base("MusicDBContext") { }
    public DbSet<Music> Musics { set; get; }
  }
}

程序就可以正常運行了。

注:

1)AttachDBFilename=|DataDirectory|\MusicDBContext.mdf

     其中的“\”可以省略掉,即為:AttachDBFilename=|DataDirectory|MusicDBContext.mdf

2)如果是ASP.NET程序,DataDirectory的初始化目錄為App_Data。

3)關(guān)于更多的|DataDirectory|知識,請參考如下:

     https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/connection-strings

     https://stackoverflow.com/questions/1409358/ado-net-datadirectory-where-is-this-documented/1409378#1409378

     https://stackoverflow.com/questions/51948028/a-file-activation-error-occurred-when-using-entity-framework

以上就是c# DataDirectory的用法的詳細內(nèi)容,更多關(guān)于c# DataDirectory的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • unity3d實現(xiàn)七天簽到功能

    unity3d實現(xiàn)七天簽到功能

    這篇文章主要為大家詳細介紹了unity3d實現(xiàn)七天簽到功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C# WPF利用Clip屬性實現(xiàn)截屏框功能

    C# WPF利用Clip屬性實現(xiàn)截屏框功能

    這篇文章主要為大家詳細介紹了C# WPF如何利用Clip屬性實現(xiàn)截屏框功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 詳解WPF如何動態(tài)生成DataGrid的行和列

    詳解WPF如何動態(tài)生成DataGrid的行和列

    在日常開發(fā)中,DataGrid作為二維表格,非常適合數(shù)據(jù)的展示和統(tǒng)計,本文以一些簡單的小例子,簡述在WPF開發(fā)中,如何動態(tài)生成DataGrid的行和列,需要的可以了解下
    2024-02-02
  • C#微信開發(fā)之自定義菜單管理

    C#微信開發(fā)之自定義菜單管理

    本文主要介紹了C#微信開發(fā)中自定義菜單管理的相關(guān)知識,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C#中按字符串截取長字符串實例

    C#中按字符串截取長字符串實例

    這篇文章主要介紹了C#中按字符串截取長字符串的實現(xiàn)方法,以實例形式展示了C#中正則匹配截取字符串的技巧,需要的朋友可以參考下
    2014-11-11
  • C#中圖片旋轉(zhuǎn)和翻轉(zhuǎn)(RotateFlipType)用法分析

    C#中圖片旋轉(zhuǎn)和翻轉(zhuǎn)(RotateFlipType)用法分析

    這篇文章主要介紹了C#中圖片旋轉(zhuǎn)和翻轉(zhuǎn)(RotateFlipType)用法,實例分析了C#圖片旋轉(zhuǎn)及翻轉(zhuǎn)Image.RotateFlip方法屬性的常用設(shè)置技巧,需要的朋友可以參考下
    2015-06-06
  • C#中Byte[]和String之間轉(zhuǎn)換的方法

    C#中Byte[]和String之間轉(zhuǎn)換的方法

    很多朋友不清楚如何在Byte[]和String之間進行轉(zhuǎn)換?下面小編給大家?guī)砹薭yte與string轉(zhuǎn)換的方法,感興趣的朋友參考下吧
    2016-08-08
  • Silverlight實現(xiàn)星星閃爍動畫

    Silverlight實現(xiàn)星星閃爍動畫

    這篇文章主要為大家詳細介紹了Silverlight實現(xiàn)星星閃爍動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 手把手教你用c#制作一個小型桌面程序

    手把手教你用c#制作一個小型桌面程序

    本文介紹了使用Visual?Studio創(chuàng)建DLL項目,并通過屬性管理器導(dǎo)入工程屬性表的方法,詳細闡述了制作Windows動態(tài)庫的步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • C#使用 Salt + Hash 來為密碼加密

    C#使用 Salt + Hash 來為密碼加密

    本文主要介紹了幾種常見的破解密碼的方法,為密碼加鹽(Salt)以及在.NET中的實現(xiàn)等。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論