ไม่พบสตริงการเชื่อมต่อชื่อ 'MyEntities' ในไฟล์กำหนดค่าแอปพลิเคชัน


246

ฉันใช้กรอบงานเอนทิตีและ ASP.NET MVC 4 เพื่อสร้างแอปพลิเคชัน

โซลูชันของฉันแบ่งออกเป็นสองโครงการ

  • ไลบรารีคลาสที่รวมไฟล์ data model (.edmx) ของฉันและอินเตอร์เฟสแบบกำหนดเองสองสามตัว
  • โครงการ 'คอนเทนเนอร์' MVC ที่อ้างอิงไลบรารีคลาสด้านบน

ปัญหาของฉันคือเมื่อฉันพยายามใช้ 'MyEntites' DbContextฉันได้รับข้อผิดพลาดต่อไปนี้:

ไม่พบสตริงการเชื่อมต่อชื่อ 'MyEntities' ในไฟล์กำหนดค่าแอปพลิเคชัน

ฉันเดาว่าปัญหาเกี่ยวข้องกับข้อเท็จจริงที่ว่าสตริงการเชื่อมต่ออยู่ใน app.config ของไลบรารีคลาสแทนที่จะเป็นโครงการ MVC

ไม่มีใครมีข้อเสนอแนะใด ๆ ?


15
ไม่เหมือนกับบริบทของคุณ (การย้ายข้อมูลอัตโนมัติกับ EF6) แต่ฉันมีปัญหาเดียวกันกับข้อความแสดงข้อผิดพลาดที่คล้ายกันเมื่อฉันสร้างสาขาย่อยใน TFS และเริ่มทำงานกับมัน การทำเครื่องหมายโครงการ mvc เป็นโครงการเริ่มต้นแก้ไขปัญหานี้ เอาท์พุท PM> Update-Database -Verbose Using StartUp project 'xxxxx.Web.Home'. Using NuGet project 'xxxxx.Web.Home.Dal'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'MovieDatabase-0.0.2' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
วัตถุเครื่องจักรกล

คำตอบ:


309

ลองคัดลอกสตริงการเชื่อมต่อไปยังไฟล์. config ในโครงการ MVC


63
ทำงานได้สมบูรณ์แบบ แต่อยากรู้ว่าทำไมโครงการที่อ้างอิงถึงไม่ได้ใช้ไฟล์ปรับแต่งของตัวเองเพื่อดึงข้อมูลสตริงการเชื่อมต่อ
หัวหน้าว่าง

7
@Alexander คำถามเก่า แต่ใช่ฉันอยากจะรู้ว่าทำไม
Kehlan Krumme

22
@Alexander เฟรมเวิร์กโหลดและใช้ไฟล์การกำหนดค่าสำหรับแอสเซมบลีที่กำลังดำเนินการ ในกรณีนี้เป็นโครงการเว็บ ไลบรารีคลาสโดยทั่วไปไม่มีแฟ้มการกำหนดค่าของตนเอง
kiprainey

24
คำสั่งเปิดใช้งานการโยกย้ายเมื่อทำงานในบริบทของ NuGet COnsole ดูที่ไฟล์กำหนดค่าเริ่มต้นโครงการไม่จำเป็นต้องเป็นโครงการที่คุณคิดว่ามันจะเป็นมาเพียงแค่ตั้งค่าโครงการด้วย app.config ที่คุณต้องการจะเริ่มต้น โครงการ. เก็บสตริงการเชื่อมต่อของคุณไว้ในไฟล์กำหนดค่าหนึ่งไฟล์แล้วอ้างอิงกับโครงการอื่น ๆ โดย <connectionString configSource = "../ ProjectDir / SharedConnections.config" />
Ryan Mann

3
ฉันได้รับข้อความแสดงข้อผิดพลาดนี้ แต่ไฟล์. config ของฉัน - ในโปรเจ็กต์ที่ถูกต้อง - แสดงรายการการเชื่อมต่อสตริงที่ถูกต้อง อย่างไรก็ตามฉันใช้การแปลงและแน่นอนว่าสตริงการเชื่อมต่อนั้นไม่ได้อ้างอิงในไฟล์. config ที่แปลงรูป ดังนั้นสิ่งที่ควรระวังหากคุณใช้การแปลงไฟล์ config
Morten Nørgaard

143

คุณถูกต้องเกิดขึ้นเพราะไลบรารีคลาส (ที่ไฟล์. edmx) ไม่ใช่โครงการเริ่มต้น / หลักของคุณ

คุณจะต้องคัดลอกสตริงการเชื่อมต่อไปยังไฟล์กำหนดค่าโครงการหลัก

ในกรณีที่การเริ่มต้น / โครงการหลักของคุณไม่มีไฟล์กำหนดค่า (เหมือนในกรณีของแอปพลิเคชันคอนโซลของฉัน) เพียงแค่เพิ่มหนึ่งรายการ (โครงการเริ่มต้น - เพิ่มรายการใหม่ -> ไฟล์กำหนดค่าแอปพลิเคชัน)

สามารถดูข้อมูลที่เกี่ยวข้องเพิ่มเติมได้ที่นี่: MetadataException: ไม่สามารถโหลดทรัพยากรเมตาดาต้าที่ระบุได้


8
คำตอบที่สำคัญคือห้องสมุดคลาส (ที่ไฟล์. edmx) ไม่ใช่โครงการเริ่มต้นของคุณ ฉันรู้ว่าโครงการเริ่มต้นของฉันไม่ได้ถูกตั้งค่าเป็นโครงการที่มี web.config ของฉันมันเป็นแอปคอนโซลที่มี app.config ที่แตกต่างกัน ดังนั้นหากคุณกำลังเพิ่มแอปพลิเคชั่นคอนโซลให้กับโซลูชันเว็บของคุณตรวจสอบให้แน่ใจว่าโครงการเว็บของคุณเป็นโครงการเริ่มต้นเมื่อคุณรันฐานข้อมูลอัปเดต!
Karl

1
ฉันได้ยกเลิกการโหลดโครงการหลักของฉันด้วยเหตุผลบางอย่างและหลังจากโหลดซ้ำฉันได้รับข้อผิดพลาดนี้พยายามเพิ่มการย้ายข้อมูล การทำให้โครงการเริ่มต้นของโครงการหลักแก้ไขปัญหาได้อีกครั้ง ขอบคุณ @Oren
Azadrum

2
โครงการเริ่มต้นของฉันมีการเปลี่ยนแปลงโดยไม่ได้ตั้งใจ นั่นเป็นบิตที่สำคัญ คำตอบของคุณช่วยจริงๆ!
Fabio Milheiro

98

ตรวจสอบให้แน่ใจว่าคุณทำโครงการของคุณ (ด้วย DbContext) เป็นการเริ่มต้น

ในโครงการคลิกขวาและเลือก

หรือ

เพิ่มในโครงการที่ตั้งค่าเป็นเริ่มต้นสตริงการเชื่อมต่อของคุณใน app.config (หรือ web.config)

หรือ

เรียกคำสั่งเช่นนี้

Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

จากนั้นลองอีกครั้ง


2
จริงๆแล้วมันเป็นโครงการที่มีสตริงการเชื่อมต่อที่ควรตั้งค่าเป็นโครงการเริ่มต้นและมักจะไม่ใช่โครงการที่ไฟล์ DbContext ของคุณตั้งอยู่
Raymond Wang

1
... ดังนั้นนอกเหนือจากการทำให้แน่ใจว่า Package Mgr กำหนดเลเยอร์ที่ถูกต้องเลเยอร์เดียวกันนั้นจำเป็นต้องมีSet as Startup Project- ตามภาพหน้าจอที่แสดงด้านบน (แม้ว่าคุณจะกด F5 คุณจะไม่สามารถเริ่มต้นห้องสมุดชั้นเรียนได้)
bkwdesign

3
สิ่งนี้ช่วยชีวิตฉันได้ แม้ว่าในตัวจัดการแพคเกจฉันมีการตั้งค่าโครงการเริ่มต้นเป็นโครงการที่มีการตั้งค่าบริบท แต่ก็ยังไม่ได้แทนที่
garfbradaz

1
"แต่มันทำงานเมื่อวานนี้! คำสั่งเดียวกันที่แน่นอน !" => นี่!
Simon_Weaver

1
วิธีที่ง่ายที่สุด =)
Alexandr

29

คุณสามารถส่งสตริงการเชื่อมต่อไปEntityFrameworkและใช้ชีวิตของคุณ:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}

และทำให้วันของฉันเป็นอย่างดีเพราะฉันหาวิธีแก้ปัญหาไม่ได้ว่าทำไมโครงการเริ่มต้นของฉันจึงหยุดค้นหาไฟล์ปรับแต่ง app.config และ <appname> .exe.config ของฉันแสดงขึ้นมาในถังขยะโครงการเริ่มต้นของฉันและ EntityFramework ไม่พบสตริงการเชื่อมต่อที่ฉันใช้ตลอดไป ฉันเพิ่งลบโปรเจ็กต์ที่ไม่ได้ใช้งานจำนวนมากออกจากโซลูชันและฉันสงสัยว่ามันเกี่ยวข้องกับมัน ฉันลบโครงการเว็บออกจากโซลูชัน สงสัยว่าโครงการอื่นของฉันใช้ web.config หรืออะไรที่ผิดปกติแบบนั้น
GrayDwarf

การกำหนดค่าของโครงการที่ทำงานอยู่ถูกใช้โดยโครงการลูกอื่น ๆ ทั้งหมด
Serj Sagan

1
แต่จะตั้งชื่อผู้ให้บริการได้อย่างไร
FizxMike

9

ในขณะที่คุณคาดการณ์มันจะทำอย่างไรกับสตริงการเชื่อมต่อที่อยู่ใน app.config ของไลบรารีคลาส

คัดลอกรายการจาก class app.config ไปยังคอนเทนเนอร์app.configหรือweb.configไฟล์


8

หากคุณมีหลายโครงการในการแก้ปัญหาแล้วตั้งค่าโครงการเริ่มต้นที่คุณมี App.config จริงของคุณ


7

คัดลอกสตริงการเชื่อมต่อไปยังapp.configหรือweb.configไฟล์ในโครงการที่ตั้งค่าเป็น "Set as StartUpProject" และหากในกรณีที่ใช้เฟรมเวิร์กเอนทิตีในโครงการเลเยอร์ข้อมูล - โปรดติดตั้งเอนทิตี้เฟรมเวิร์กเอนทิตีในโครงการหลัก


4

นอกจากนี้ยังเกิดขึ้นหากโครงการเริ่มต้นที่มีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งซึ่งไม่ได้มีสตริงการเชื่อมต่อ

  1. คลิกขวาที่โซลูชัน - คลิกคุณสมบัติ
  2. ภายใต้คุณสมบัติทั่วไปให้เลือกโครงการเริ่มต้น
  3. บนบานหน้าต่างด้านขวาให้เลือกโครงการที่มีสตริงการเชื่อมต่อ (ในกรณีส่วนใหญ่จะเป็นโครงการ MVC - โครงการที่เริ่มโซลูชัน)

ใช่มันใช้งานได้ ฉันได้สร้างไลบรารีคลาสสำหรับ EF เพื่อสื่อสารกับฐานข้อมูลและได้รับปัญหาเดียวกัน
Satinder Sidhu

4
  1. เพิ่มไฟล์ App.Config
  2. ตั้งค่าโครงการเป็นโครงการเริ่มต้น
  3. ตรวจสอบให้แน่ใจว่าคุณเพิ่มสตริงการเชื่อมต่อหลังจากentityFrameworkส่วน:

    <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"/>
    
    </configSections>
    
    <connectionStrings>
       <!-- your connection string goes here, after configSection -->
    </connectionString>

3

ใช่มันโง่ คุณสามารถหลีกเลี่ยงการคัดลอกสตริงการเชื่อมต่อโดยใช้เครื่องมือสร้างการเชื่อมต่อ รหัส VB.Net (ใช้ในการผลิต แต่แก้ไขที่นี่เล็กน้อยดังนั้นถือว่าเป็นยังไม่ทดลองมีความสุขที่จะช่วยเหลือปัญหาใด ๆ ) ที่ฉันมีตัวแปร serverName ตัวแปร databaseName ฉันผ่านพวกเขาเป็นวิธีการและสร้างการเชื่อมต่อ สำหรับฉัน:

    Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""")
   Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString)
                        SqlBuilder.DataSource = serverName
                        SqlBuilder.InitialCatalog = databaseName
                        EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString
                        Using vmCtx As New VmEfConn(EfBuilder.ConnectionString)

2

คุณใช้มากกว่าหนึ่งโครงการในโซลูชันของคุณหรือไม่

เพราะถ้าคุณเป็นเว็บ config คุณต้องตรวจสอบว่าเป็นหนึ่งในโครงการเดียวกันกับไฟล์ de. edmx


ใช่เป็นกรณีนี้ โปรเจ็กต์ที่มีสตริงการเชื่อมต่อเป็นไลบรารีคลาสซึ่งรวมเฉพาะไฟล์ App.config ดูเหมือนว่าโครงการ MVC จะไม่ตรวจสอบสรรพสินค้านี้
jjc99

ในระหว่างการพัฒนาจะทำการตรวจสอบ app.config ในโครงการคุณต้องเพิ่มที่นั่น
Diego

ขอบคุณที่คุณตอบกลับ ฉันพยายามคัดลอกสตริงการเชื่อมต่อจากโครงการที่มีไฟล์ edmx และวางไว้ในไฟล์ root web.config ในโครงการ MVC ของฉัน น่าเสียดายที่มันยังไม่พบสตริงการเชื่อมต่อ ฉันต้องแก้ไขสตริงการเชื่อมต่อด้วยวิธีใด ๆ หรือไม่?
jjc99

เป็นวิธีอื่น ๆ ในเวลา dev คุณต้องการสตริง con บน app.cofnig ในโครงการที่มีไฟล์. edmx ถ้าคุณมีมันอาจเป็นชื่อที่ผิด ชื่อของสตริงการเชื่อมต่อควรเป็นชื่อเดียวกันกับคุณสมบัติ "entity containr name" ของไฟล์. edmx ของคุณ
Diego


1

ฉันมีปัญหานี้เมื่อใช้หลาย proyect เริ่มต้นด้วย web.config และ app.config สำหรับโครงการ EntityFramework

เพื่อหลีกเลี่ยงปัญหานี้คุณต้อง:

  1. คุณต้องการสตริงการเชื่อมต่อในไฟล์ * .config ที่เริ่มทำงาน
  2. คุณต้องติดตั้ง EntityFramework DLL ลงในข้อมูลอ้างอิงของคุณ

1

ฉันต้องเผชิญกับปัญหาเดียวกัน ฉันพลาดที่จะนำสตริงการเชื่อมต่อไปยังโครงการเริ่มต้นเนื่องจากฉันกำลังดำเนินการเข้าถึงข้อมูลจากเลเยอร์อื่น หากคุณไม่มี app.config ในโครงการเริ่มต้นของคุณให้เพิ่มไฟล์ app.config แล้วเพิ่มสตริงการเชื่อมต่อไปยังไฟล์ปรับแต่งนั้น


1
ขอบคุณฉันมีปัญหากับการโหลดโปรเจ็กต์และ "โปรเจ็กต์เริ่มต้น" หายไป คำตอบของคุณทำให้ฉันนึกถึงเพื่อให้แน่ใจว่าโครงการที่มีไฟล์บริบทและ app.config คือการเริ่มต้น
Mastro

1

ฉันได้สิ่งนี้โดยไม่ได้ตั้งค่าโปรเจ็กต์เป็นการเริ่มต้นตามที่ระบุโดยคำตอบอื่น ผลงานของฉันต่อสิ่งนี้ - เมื่อทำ Add-Migrations และ Update-Database ระบุโครงการเริ่มต้นเป็นส่วนหนึ่งของคำสั่งในคอนโซลผู้จัดการแพคเกจ Nuget (ไม่รวมอักขระ '[' หรือ ']' นั่นเป็นเพียงการแสดงให้คุณเห็นว่าคุณ ต้องเปลี่ยนข้อความที่อยู่ในชื่อโครงการของคุณ):

  1. เปิดใช้การโยกย้าย
  2. Add-Migrations -StartupProject [ชื่อโครงการของคุณที่มีคลาสบริบทข้อมูล]
  3. Update-Database - StartupProject [ชื่อโครงการเหมือนด้านบน]

ที่ควรทำ


วิธีนี้คุณสามารถรวมคำสั่งในโพรซีเดอร์ของคุณและไม่จำเป็นต้องเปลี่ยนโปรเจ็กต์เริ่มต้นอย่างต่อเนื่องให้ห่างจากค่าดีฟอลต์
JakeJ

1

เป็นเพราะคลาสบริบทของคุณถูกสืบทอดจาก DbContext ฉันเดา ctor ของคุณเป็นเช่นนี้:

public MyEntities()
    : base("name=MyEntities")

name=... ควรเปลี่ยนเป็นชื่อ connectionString ของคุณ


0

สตริงการเชื่อมต่อที่สร้างโดยโครงการที่มีไฟล์. edmx จะสร้างสตริงการเชื่อมต่อซึ่งจะปรากฏเป็นโฮลด์จาก app.config ประเภทของไฟล์ที่ถูกคัดลอกไปยังไดเรกทอรีออกและอ้างอิงโดยไฟล์ที่เรียกใช้เพื่อเก็บข้อมูลการกำหนดค่ารันไทม์

สิ่งนี้จะหยุดลงในโครงการเว็บเนื่องจากไม่มีกระบวนการอัตโนมัติในการเพิ่มข้อมูล. config แบบสุ่มลงในไฟล์ web.config สำหรับโครงการเว็บ

ที่ง่ายที่สุดคือการคัดลอกสตริงการเชื่อมต่อจากไฟล์กำหนดค่าไปยังส่วนการเชื่อมต่อของไฟล์ web.config และไม่สนใจเนื้อหาไฟล์ปรับแต่ง


0

วิธีที่ดีที่สุดที่ฉันเพิ่งพบที่อยู่นี้คือการตั้งโครงการชั่วคราว (น่าจะเป็นห้องสมุดคลาส) เป็นโครงการเริ่มต้น สิ่งนี้บังคับให้คอนโซลตัวจัดการแพคเกจใช้โครงการดังกล่าวเนื่องจากเป็นแหล่งกำหนดค่า ส่วนหนึ่งของเหตุผลที่มีการตั้งค่าวิธีนี้เป็นเพราะรูปแบบจากบนลงล่างที่ไฟล์ econfig ที่มักจะปฏิบัติตาม กฎง่ายๆคือโครงการที่ใกล้เคียงที่สุดกับไคลเอนต์ (ตัวอย่างเช่นแอปพลิเคชัน MVC) คือ web.config หรือ app.config ที่จะใช้


0

ตรวจสอบให้แน่ใจว่าคุณได้วางสตริงการเชื่อมต่อใน ROOT web.config ของโครงการเริ่มต้น

ฉันรู้ว่าฉันค่อนข้างชัดเจนที่นี่ แต่มันก็เกิดขึ้นกับฉันด้วย - แม้ว่าฉันจะมีสตริงการเชื่อมต่อใน Web.Config ของโครงการ MVC ของฉัน (ไฟล์. edmx ถูกวางไว้ที่โครงการห้องสมุดชั้นอื่น) และฉันไม่สามารถ หาสาเหตุว่าทำไมฉันถึงได้รับการยกเว้น ... เรื่องสั้นสั้นฉันคัดลอกสตริงการเชื่อมต่อไปยัง Views \ Web.Config โดยไม่ได้ตั้งใจในการผสมผสานที่แปลกประหลาดของความเหนื่อยล้าและไม่เลื่อนไปสู่ด้านล่างของ - สถานการณ์แก้ปัญหา explorer ใช่สิ่งเหล่านี้เกิดขึ้นกับผู้พัฒนาที่มีประสบการณ์เช่นกัน :)


0

ปัญหานี้เกิดขึ้นเมื่อคุณใช้เลเยอร์ในโครงการของคุณและกำหนดหรือติดตั้ง Entity frame ทำงานใน DataLayer และลองเรียกใช้โครงการของคุณ

ดังนั้นเพื่อเอาชนะจากปัญหานี้ให้คัดลอกสตริงการเชื่อมต่อจากชั้นที่มีไฟล์ Edmx อยู่และวางสตริงการเชื่อมต่อใน web.config หลัก


0

เพิ่มสตริงการเชื่อมต่อในไฟล์ root web.config ของโครงการ 'คอนเทนเนอร์' MVC ที่อ้างอิงไลบรารีคลาสดังต่อไปนี้:

 <connectionStrings>

  <add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" />

  </connectionStrings>

ถ้าคุณไม่ต้องการใช้ "MyEntities" เป็นชื่อการเชื่อมต่อให้เปลี่ยนตามที่คุณต้องการ แต่ทำการเปลี่ยนแปลงต่อไปนี้ในคลาส MyEntities DbContext ของคุณ:

MyEntities: DbContext
 {
   public MyEntities():base("Name-Of-connection-string-you wish to connect"){ }
 }

เหตุผลข้อผิดพลาดนี้คือถ้าเราจะไม่ระบุชื่อของสตริงการเชื่อมต่อหรือสตริงการเชื่อมต่อในคลาสที่ได้รับของ DbConext (ในกรณีของคุณมันคือ MyEntities) จากนั้น DbContext จะค้นหาสตริงการเชื่อมต่อในรูทไฟล์ web.config โดยอัตโนมัติ เหมือนกับชื่อคลาสที่ได้รับ (ในกรณีของคุณคือเอนทิตีของฉัน)


0

ฉันมีปัญหานี้เมื่อใช้งาน MSTest ฉันไม่สามารถใช้งานได้หากไม่มีสถานะ "noisolation"

หวังว่านี่จะช่วยใครซักคน เสียเวลาไปกับการคิด ทุกอย่างทำงานได้ดีจาก IDE มีบางอย่างแปลก ๆ เกี่ยวกับ Entity Framework ในบริบทนี้


0

การโยกย้ายปกติ

มีสองตัวเลือก - ตัวเลือกแรกที่ทุกคนที่นี่แนะนำคือเพื่อให้แน่ใจว่าสตริงการเชื่อมต่ออยู่ในไฟล์ Web.config ของโครงการ เมื่อทำงานกับสตริงการเชื่อมต่อจากการตั้งค่าแอปพลิเคชัน Azure นั่นหมายถึงการเขียนทับค่า Web.config ของคุณด้วยค่า Azure

สีฟ้าหรือการโยกย้ายอัตโนมัติ (โดยทางโปรแกรม)

มีตัวเลือกที่สองหากคุณใช้การย้ายข้อมูลแบบเป็นโปรแกรมซึ่งช่วยให้คุณเรียกใช้การย้ายข้อมูลโดยใช้สตริงการเชื่อมต่อที่ได้รับแบบไดนามิก (หรือผ่านการตั้งค่าแอปพลิเคชัน Azure) โดยไม่เก็บไว้ใน Web.config

เมื่อตั้งค่าTargetDatabaseของการกำหนดค่าให้ใช้ตัวสร้างDbConnectionInfoที่ใช้สตริงการเชื่อมต่อและชื่อผู้ให้บริการแทนตัวสร้างที่ใช้เพียงชื่อการเชื่อมต่อ หากสตริงการเชื่อมต่อของคุณไม่มีชื่อผู้ให้บริการและคุณกำลังใช้ SQL Server / Azure SQL ให้ใช้"System.Data.SqlClient"


0

สิ่งนี้อาจส่งผลให้มีการอ้างอิง dll ไม่เพียงพอที่ถูกอ้างอิงในรหัสการโทร แฮ็คเล็ก ๆ ที่ซุ่มซ่ามสามารถช่วยชีวิตคุณได้

ฉันติดตาม DB First และได้สร้างไฟล์ EDMX ในโครงการห้องสมุด DAL Class และสิ่งนี้มีการอ้างอิงไปยังห้องสมุด BAL Class ซึ่งในที่สุดก็ถูกอ้างอิงโดยบริการ WCF

เนื่องจากฉันได้รับข้อผิดพลาดนี้ใน BAL ฉันได้ลองวิธีการดังกล่าวเพื่อคัดลอกรายละเอียดการกำหนดค่าจาก App.config ของโครงการ DAL แต่ไม่ได้แก้ปัญหา ในที่สุดด้วยคำแนะนำของเพื่อนฉันเพิ่งเพิ่มไฟล์หุ่นจำลองในโครงการ WCF (ด้วยการเชื่อมต่อฐานข้อมูลที่เกี่ยวข้อง ฯลฯ ) ดังนั้นมันจึงนำเข้าทุกอย่างที่จำเป็นแล้วฉันก็ลบไฟล์ EDMX และมันก็กำจัดปัญหาด้วย การสร้างที่สะอาด


0

มีความคิดเห็นเกี่ยวกับคำตอบยอดนิยมโดย @RyanMann ที่แนะนำ:

จัดเก็บสตริงการเชื่อมต่อของคุณในหนึ่งไฟล์ config จากนั้นอ้างอิงพวกเขาในโครงการอื่น ๆ โดย <connectionString configSource="../ProjectDir/SharedConnections.config" />

นี่เป็นข้อเสนอแนะที่ยอดเยี่ยม!

นอกจากนี้ยังทำงานเพื่อแบ่งปันสตริงการเชื่อมต่อระหว่าง App.config และไฟล์ Web.config!

ใครก็ตามที่ต้องการทำตามคำแนะนำนี้ควรมุ่งไปที่คำตอบ SOนี้ มันมีคำแนะนำทีละขั้นตอนที่ยอดเยี่ยมเกี่ยวกับการแชร์สตริงการเชื่อมต่อระหว่างหลายโครงการในโซลูชัน

ข้อแม้เท่านั้นที่configSourceจะต้องมีอยู่ในไดเรกทอรีเดียวกันหรือไดเรกทอรีย่อย ลิงค์ด้านบนอธิบายวิธีใช้ "เพิ่มเป็นลิงค์" เพื่อแก้ไขปัญหานี้


0

ฉันมีข้อผิดพลาดนี้เมื่อพยายามใช้ EF ภายในปลั๊กอิน AutoCAD ปลั๊กอิน CAD รับสตริงการเชื่อมต่อจากไฟล์ acad.exe.config เพิ่มสตริงเชื่อมต่อตามที่กล่าวไว้ข้างต้นลงในไฟล์กำหนดค่า acad และใช้งานได้

เครดิตไปที่นอร์แมนหยวนจาก ADN เครือข่าย


0

หากคุณใช้รุ่น MVVM ให้ลองคัดลอกสตริงการเชื่อมต่อไปยังทุกส่วนของโครงการของคุณ

ตัวอย่างเช่นหากโซลูชันของคุณมีสองโครงการโครงการไลบรารีคลาสและโครงการ wpf คุณต้องคัดลอกสตริงการเชื่อมต่อของโครงการแบ็กเอนด์ (ไลบรารีคลาส porject) และวางสำเนาในไฟล์ App.config ของโครงการ wpf

<connectionStrings>
  <add name="DBEntities" ... />
</connectionStrings>

หวังว่าจะเป็นประโยชน์สำหรับคุณ :)


-2

เพิ่ม Connectoinstrnig ในไฟล์ web.config

<ConnectionStiring> <add name="dbName" Connectionstring=" include provider name too"  ></ConnectionStiring>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.