最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# DataDirectory的用法

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

筆者在使用Entity Framework中的Scaffolding機(jī)制自動創(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、運(yùn)行此程序,發(fā)現(xiàn)程序不能按自己想要的結(jié)果運(yùn)行,出現(xiàn)在最前面出現(xiàn)的錯誤。

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

AttachDBFilename=|DataDirectory|\MusicDBContext.mdf

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

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

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

運(yùn)行此行代碼,發(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)的那種錯誤。

那么,我們該如何解決呢?細(xì)心的人可以發(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; }
  }
}

程序就可以正常運(yùn)行了。

注:

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的用法的詳細(xì)內(nèi)容,更多關(guān)于c# DataDirectory的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#算法之大牛生小牛的問題高效解決方法

    C#算法之大牛生小牛的問題高效解決方法

    本文主要介紹兩種方法處理大牛生小牛的問題,第二種效率更高,希望能給大家一個參考。
    2016-06-06
  • C# 類型轉(zhuǎn)換(隱式類型,顯式類型,自定義類型)

    C# 類型轉(zhuǎn)換(隱式類型,顯式類型,自定義類型)

    本文詳細(xì)介紹了C#中的類型轉(zhuǎn)換,包括隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 使用C#代碼在PDF文檔中添加、刪除和替換圖片

    使用C#代碼在PDF文檔中添加、刪除和替換圖片

    在當(dāng)今數(shù)字化文檔處理場景中,動態(tài)操作PDF文檔中的圖像已成為企業(yè)級應(yīng)用開發(fā)的核心需求之一,本文 將介紹如何在.NET平臺使用C#代碼在PDF文檔中添加、刪除和替換圖片,需要的朋友可以參考下
    2025-04-04
  • C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke 方法的區(qū)別和聯(lián)系

    C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke&

    在C#中,委托(Delegate)提供了多種調(diào)用方式,包括 Invoke、BeginInvoke、EndInvoke 和 DynamicInvoke,每種調(diào)用方式都有其特定的用途和適用場景,下面將詳細(xì)介紹這些方法的區(qū)別與聯(lián)系,感興趣的朋友一起看看吧
    2025-03-03
  • c# 抓取Web網(wǎng)頁數(shù)據(jù)分析

    c# 抓取Web網(wǎng)頁數(shù)據(jù)分析

    通過程序自動的讀取其它網(wǎng)站網(wǎng)頁顯示的信息,類似于爬蟲程序。比方說我們有一個系統(tǒng),要提取BaiDu網(wǎng)站上歌曲搜索排名。分析系統(tǒng)在根據(jù)得到的數(shù)據(jù)進(jìn)行數(shù)據(jù)分析。為業(yè)務(wù)提供參考數(shù)據(jù)。
    2008-11-11
  • C#自定義轉(zhuǎn)換器的實現(xiàn)

    C#自定義轉(zhuǎn)換器的實現(xiàn)

    本文主要介紹了C#自定義轉(zhuǎn)換器的實現(xiàn),包括隱式轉(zhuǎn)換和顯式轉(zhuǎn)換的語法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 深入理解C# abstract和virtual關(guān)鍵字

    深入理解C# abstract和virtual關(guān)鍵字

    深入理解C# abstract和virtual關(guān)鍵字,學(xué)習(xí)c#的朋友可以參考下。
    2011-06-06
  • C#計算代碼執(zhí)行時間的方法

    C#計算代碼執(zhí)行時間的方法

    在一些測試工作時我們需要獲得高精度的代碼執(zhí)行時間以比較其效率。
    2013-03-03
  • c#正反序列化XML文件示例(xml序列化)

    c#正反序列化XML文件示例(xml序列化)

    這篇文章主要介紹了c#正反序列化XML文件示例,可以將對象序列化為XML文本或者文件,或者將XML文件或文本反序列化為對象,要求進(jìn)行序列化的對象不能出現(xiàn)序列化異常,支持類的嵌套,要求類的屬性為public
    2014-03-03
  • C# 實現(xiàn)Distinct將對象按條件去重

    C# 實現(xiàn)Distinct將對象按條件去重

    這篇文章主要介紹了C# 實現(xiàn)Distinct將對象按條件去重,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

都昌县| 阜康市| 温宿县| 页游| 称多县| 隆德县| 申扎县| 射洪县| 布尔津县| 巩义市| 崇州市| 曲水县| 武强县| 七台河市| 体育| 临海市| 东阿县| 宜君县| 深泽县| 南平市| 南昌县| 子洲县| 瑞昌市| 临朐县| 大英县| 当阳市| 湾仔区| 凉城县| 双流县| 霍州市| 霞浦县| 前郭尔| 泸西县| 青冈县| 建湖县| 施秉县| 定远县| 城步| 宿州市| 西城区| 乐亭县|