ข้อยกเว้น EF 4.1“ ผู้ให้บริการไม่ส่งคืนสตริง ProviderManifestToken”


88

ฉันพยายามทำซ้ำตัวอย่างที่พบใน MSDN ฉันใช้ ASP.NET และ EF 4.1 (CTP?) ฉันใช้ NuGet เพื่อติดตั้งแพ็คเกจ EntityFramework

ฉันได้รับข้อผิดพลาดนี้: The provider did not return a ProviderManifestToken string... และไม่มีการสร้างฐานข้อมูล

นี่คือสตริงการเชื่อมต่อของฉัน:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

นี่คือรหัสของฉัน:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

นี่คือบริบทของฉัน:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

นี่คือระบบ SQL 2008 ที่ได้รับการแก้ไขอย่างสมบูรณ์พร้อม VS 2010 SP1


ดูเหมือนว่าหลังจากเพิ่ม [Key] ให้กับ Model แล้วมันก็ใช้งานได้เลย ฉันยังคงมีปัญหาอื่นอยู่ แต่อาจช่วยแก้ไขได้
bugnuker

นอกจากนี้ฉันอาจเพิ่ม "Intergrated security = true" ให้กับสตริงการเชื่อมต่อของฉัน ...
bugnuker

ฉันมีข้อยกเว้นเหมือนกันเมื่อทำงานกับSqlServerCe.Entity.dll
Nano Taboada

2
เพื่อผลประโยชน์ของสิ่งที่ทำให้เกิดข้อยกเว้นนี้ - ฉันใช้เวลา 20 นาทีในการจ้องมองผ่านการพิมพ์ผิดในชื่อของสตริงการเชื่อมต่อที่ต้องตรงกับชื่อของบริบท
justSteve

คำตอบ:


184

ฉันได้รับข้อผิดพลาดนี้และลองทำตามคำแนะนำก่อนหน้านี้สองสามข้อ จากนั้นฉันตรวจสอบข้อยกเว้นภายในและสังเกตว่าฉันได้รับความล้มเหลวในการเข้าสู่ระบบ SQL อย่างง่ายสำหรับผู้ใช้ มีอย่างอื่นให้ตรวจสอบ


ในกรณีของฉันรหัสผ่านเซิร์ฟเวอร์ sql หมดอายุ
mklein

3
ขอขอบคุณที่ชี้ทางที่ถูกต้องให้ฉัน บริการ SQL Express ของฉันไม่เริ่มทำงาน - duh!
camainc

ข้อยกเว้นภายในที่ดี ... ฉันมีชื่อ DB ของฉันผิดเมื่อฉันชี้ EF ไปยังตำแหน่งสำรองใหม่ ... สิ่งที่ตลกฉันตรวจสอบ InnerEx และความคิดเห็นของคุณทำให้ฉันกลับไปอ่านซ้ำ ... ความรุ่งโรจน์!
Andy Danger Gagne

การใช้ Integrated Security IIS AppPool ไม่มีสิทธิ์ที่จำเป็น
Vincent Vancalbergh

+1 - (IP บ้านของฉันเปลี่ยน) ข้อผิดพลาด Msg: ไม่สามารถเปิดเซิร์ฟเวอร์ 'SERVERNAME' ที่ร้องขอโดยการเข้าสู่ระบบ ไคลเอนต์ที่มีที่อยู่ IP "MY_OLD_IP" ไม่ได้รับอนุญาตให้เข้าถึงเซิร์ฟเวอร์ ในการเปิดใช้งานการเข้าถึงให้ใช้ SQL Azure Portal หรือเรียกใช้ sp_set_firewall_rule บนฐานข้อมูลหลักเพื่อสร้างกฎไฟร์วอลล์สำหรับที่อยู่ IP หรือช่วงที่อยู่นี้ อาจใช้เวลาถึงห้านาทีเพื่อให้การเปลี่ยนแปลงนี้มีผล \ r \ n การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ "MYADMINACCT" \ r \ n เซสชันนี้ได้รับการกำหนด ID การติดตามเป็น "GUID" ให้รหัสการติดตามนี้แก่ฝ่ายสนับสนุนลูกค้าเมื่อคุณต้องการความช่วยเหลือ "}
Dylan Hayes

8

บางครั้งอาจเกิดขึ้นเมื่อคุณวางสตริงการเชื่อมต่อภายใน app.config ของโปรเจ็กต์ที่ไม่ถูกต้องใน Visual Studio

ตัวอย่างเช่นฉันพบปัญหานี้ในโครงการ EF 4.1 (เวอร์ชันที่วางจำหน่าย) + โครงการบริการข้อมูล WCF และฉันสังเกตเห็นว่าฉันไม่มีสตริงการเชื่อมต่อที่ระบุไว้ในโครงการบริการข้อมูลซึ่งมีการใช้งาน


นี่คือทางออกของฉัน ฉันต้องใส่สตริงการเชื่อมต่อที่เหมาะสมในโครงการเริ่มต้น
MickJuice

5

ฉันมีข้อผิดพลาดเดียวกันและจริงๆแล้วมันล้มเหลวในการเข้าสู่ระบบสำหรับเซิร์ฟเวอร์ที่ระบุ ฉันลบแอตทริบิวต์ "Integrated Security" ออกจากสตริงการเชื่อมต่อ config และใช้งานได้


สิ่งนี้ได้ผลสำหรับฉัน ใครก็ตามที่มีปัญหานี้ควรลองทำเช่นนี้หากวิธีอื่นไม่ได้ผล
Justin

ข้อผิดพลาดนี้เกิดขึ้นเมื่อปิดบริการ SQL Express บนเครื่องของฉัน
John M

4

ฉันมีปัญหาเดียวกันและฉันเพิ่มโค้ดด้านล่างหลังจากอินสแตนซ์ของบริบทของฉัน (onload by ตัวอย่าง)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

ฉันมีปัญหาคล้ายกันกับแอป MvcMusicStore ฉันเปลี่ยนบรรทัดใน Web.config จาก "Instance = true" เป็น "Instance = false" บางครั้งมันใช้งานได้โดยไม่ต้องปรับแต่ง แต่ฉันไม่รู้ว่าอะไรเป็นสาเหตุของความแตกต่าง การอ่านhttp://msdn.microsoft.com/en-us/library/ms254504.aspxนี้ ไม่ได้ช่วยอะไรเลย


น่าทึ่ง ... นี่เป็นทางออกที่เหมาะสมสำหรับฉัน ฉันมีความคิดว่าทำไมไม่มี.
Kees C.Bakker

2

ด้วยเหตุผลบางประการของการอนุญาต EF ไม่สามารถสร้างการเชื่อมต่อฐานข้อมูลได้ ฉันต้องเผชิญกับปัญหาเดียวกันตลอดทั้งวัน ในที่สุดฉันได้ลองใช้วิธีแก้ปัญหาต่อไปนี้และใช้งานได้: a / Open IIS (ฉันใช้ IIS 7) b / เปิดการตั้งค่าขั้นสูงของ appool ที่เว็บไซต์ใช้ (เช่น: DefaultAppPool) c / ดูที่กลุ่ม Process Model เปลี่ยนค่า Identity เป็น "Localsystem"

หวังว่าจะได้ผลกับคุณ


2

ฉันเพิ่งมีปัญหาเดียวกัน ...
วิธีแก้ปัญหาที่ใช้ได้กับฉันคือ:
เรียกใช้เครื่องมือกำหนดค่าเครือข่ายไคลเอนต์ (พิมพ์ cliconfg ใน Run)
และตรวจสอบให้แน่ใจว่าเปิดใช้งาน TCP / IP แล้ว ..


2

ในที่สุดฉันก็แตกมัน - หลังจากการไล่ล่าห่านป่าเล็กน้อยโดยคิดว่าเป็นเพราะสิทธิ์

การเปิดเผย: ใช้ SQL PROFILER

(หมายเหตุ: ฉันเพิ่งลดระดับจาก EF6 เป็น EF5)

การใช้ SQL Profiler ฉันพบ SQL ตัวสุดท้ายที่ดำเนินการก่อนรายงานล้มเหลวอย่างรวดเร็ว:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

ดูให้ดี - เกี่ยวกับการย้ายข้อมูล มันกำลังมองเข้ามา__MigrationHistoryตาราง - ซึ่งฉันไม่รู้ด้วยซ้ำว่าได้สร้างขึ้น (ฉันได้ลบการโยกย้ายใน CSPROJ ของฉันไปแล้ว) และล้างสิ่งนั้นออก

ดังนั้นฉันจึงดึงแถวสำหรับตารางนั้นขึ้นมาและดูว่ามันเชื่อมโยงกับเวอร์ชันผลิตภัณฑ์เฉพาะ (v6)

ป้อนคำอธิบายภาพที่นี่

จริงๆแล้วฉันลดระดับจาก EF6 (ซึ่งฉันไม่ได้ตั้งใจจะติดตั้งตั้งแต่แรก) เป็น EF5 (ซึ่งเข้ากันได้กับนั่งร้านมากกว่า) และเมื่อปัญหาเริ่มขึ้น

ฉันเดาว่าModel (<Binary data>)คอลัมน์ไม่เข้ากันได้แบบย้อนหลัง - ด้วยเหตุนี้The provider did not return a ProviderManifest instanceข้อผิดพลาดเนื่องจากไม่สามารถถอดรหัสได้

ฉันไม่มีอะไรจะเสียและแค่เช็ดโต๊ะนี้ให้หมดแล้ววิ่งUpdate-Database -Verboseจากนั้นก็กลับมาทำงานต่อ

หากคุณอยู่ในสภาพแวดล้อมขั้นสูงหรืออยู่ในระหว่างการผลิตการลบตารางนี้อาจไม่ใช่วิธีแก้ปัญหา แต่วิธีนี้ทำให้ฉันกลับไปทำงานได้ทันที


ฉันสิ้นสุดขึ้นวางตาราง __MigrationsHistory สมบูรณ์และ rescaffolding ด้วยและAdd-Migration Update-Database -Verbose -Forceนี่คือการอ้างอิงคำสั่งcoding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

ประเด็นสำคัญคือนี่ไม่ใช่ข้อผิดพลาดในการอนุญาตเท่านั้น
Simon_Weaver

1

ในการใช้ Visual Studio 11 Beta กับ EF4.1 และ ASP.NET MVC ฉันเกือบจะดึงผมออกจนพบ

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

เพื่อแก้ไขปัญหาของฉันฉันเข้าไปที่ Application_Start และทำการเปลี่ยนแปลง

Database.DefaultConnectionFactory = SqlConnectionFactory ใหม่ ("Data Source = (localdb) \ v11.0; Integrated Security = True; MultipleActiveResultSets = True");

ถึง

Database.DefaultConnectionFactory = SqlConnectionFactory ใหม่ ( @ "Data Source = (localdb) \ v11.0; Integrated Security = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");ถูกเพิ่มเข้าไปในMainmehod ของฉันตอนนี้มันใช้งานได้เหมือนมีเสน่ห์! ขอบคุณมาก.
rotgers

1

ข้อผิดพลาดนี้จะปรากฏเฉพาะในขณะที่ไฟล์. edmx เปิดอยู่และจะหายไปทันทีที่ปิดไฟล์อีกครั้ง

คำพูดนี้จากCodePlex นี้ใช้ได้กับฉัน (Visual Studio 2013 / MVC 5)


ร่วมงานกับฉันด้วย พยายามปิดและเปิดไฟล์ edmx อีกครั้ง ทำงานแล้ว
Rohit

1

อีกสิ่งหนึ่งที่ควรพิจารณาหากคุณใช้ EF Code First ก็คือบางครั้งก็ไม่ได้สร้างฐานข้อมูลสำรองไปยังคลาส DbContext ของคุณโดยอัตโนมัติ วิธีแก้ปัญหาคือการเพิ่มสตริงการเชื่อมต่อของคุณเอง - คุณสามารถใช้สตริงการเชื่อมต่อที่อาจมีอยู่เพื่อจัดการฐานข้อมูลผู้ใช้ / การลงทะเบียนที่สำรอง Simple Membership Provider เป็นเทมเพลต สุดท้ายคุณจะต้องเพิ่มตัวสร้างเริ่มต้นสำหรับคลาส DbContext ที่คุณสร้างขึ้น:

public ChaletDb():base("ChaletConnection")
    {

    }

ที่นี่ชื่อของสตริงการเชื่อมต่อตามที่คุณป้อนในไฟล์ web.config ของคุณถูกใช้เพื่อสั่งให้ DbContext สร้างฐานข้อมูล บางครั้งฉันต้องสร้างฐานข้อมูลด้วยตนเอง (ใน SQL Server Management Studio) ซึ่งแจ้งให้ทำงาน


0

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

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

สิ่งนี้ใช้ได้ถ้าคุณใช้ LocalDb ("sql express" like ใหม่) แต่ผิดอย่างสมบูรณ์หากคุณไม่ได้ติดตั้งเซิร์ฟเวอร์เฉพาะนั้นและใช้ SQL ปกติ

วิธีแก้ไข: ลบรหัสด้านบน


0

เนื่องจากการเชื่อมต่อกับเซิร์ฟเวอร์ SQL ล้มเหลว

ตรวจสอบให้แน่ใจว่าบัญชีผู้ใช้ที่คุณกำลังเรียกใช้กระบวนการนี้มีสิทธิ์เข้าถึง SQL Server

หากคุณสร้าง DbContext จากพาเรนต์เธรด (เช่นการใช้การฉีดการพึ่งพา) จากนั้นหากคุณแอบอ้างเป็นผู้ใช้รายอื่นข้อผิดพลาดนี้จะเกิดขึ้น วิธีแก้ปัญหาคือการสร้าง DbContext ภายในเธรดใหม่หรือบริบทการเลียนแบบใหม่


0

ฉันเพิ่งปิด Visual Studio ทุกอินสแตนซ์และเปิดโซลูชันของฉันอีกครั้ง

ฉันไม่รู้ว่าเกิดอะไรขึ้นจริง ๆ แต่ฉันมีวิธีแก้ปัญหาเดียวกันที่เปิดจากพื้นที่ทำงานในเครื่องที่แตกต่างกันสองแห่ง (หนึ่งที่มีการเปลี่ยนแปลงในเครื่องของฉันหนึ่งที่มีซอร์สโค้ดที่เก็บที่ไม่เปลี่ยนแปลง) ฉันทำงานกับ postgres DB, Entity Framework 6, Visual Studio 2013 และ ASP.NET MVC 5


0

ฉันมีข้อผิดพลาดสำหรับกรอบงานเอนทิตี แต่ไม่มีคำตอบใดข้างต้นที่เหมาะสมกับโซลูชันที่ใช้งานได้ในที่สุด

รหัส EntityFramework รุ่นแรกและ DataContext ของฉันอยู่ในโครงการแยกต่างหากจากโครงการหลัก WebAPI ของฉัน โครงการ My Entity Framework ที่ไหนสักแห่งในบรรทัดของการเข้ารหัสถูกตั้งค่าเป็นโครงการเริ่มต้นดังนั้นเมื่อฉันเรียกใช้การย้ายข้อมูลฉันได้รับ "ผู้ให้บริการไม่ส่งคืนสตริง ProviderManifestToken" ... ปัญหาการเชื่อมต่อ

ปรากฎว่าเนื่องจาก ConnectionString ไปยัง DB อยู่ในไฟล์ Web.config ในโปรเจ็กต์ WebAPI Main ซึ่งเมื่อฉันรันการโอนย้ายสตริงการเชื่อมต่อจึงไม่ถูกดึงออกมา ด้วยการตั้งค่าโครงการ WebAPI เป็น startProject ของฉันฉันสามารถเชื่อมต่อได้สำเร็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.