0

나는 아직도이 모든 것에 꽤 새로울 것이므로 희망적으로 이것은 빠른 수정이다.데이터를 공유하도록 SQL Server Express 데이터베이스와 DbContext 개체를 얻으려면 어떻게해야합니까?

Microsoft SQL Server Express를 통해 생성 된 SQL Server Express 데이터베이스가 있습니다. Visual Studio Community Edition을 사용하고 있습니다.

데이터베이스 정보를 입력/검색/조작하는 간단한 프로그램을 만들려고합니다.

데이터베이스를 프로그램 데이터 원본으로 설정 한 다음 양식 컨트롤러를 데이터베이스 테이블에 바인딩하면 양식 컨트롤이 데이터베이스의 테이블 레코드를 표시합니다. 문제는 없지만 프로그램 내에서 쉽게 데이터를 사용할 수 있기를 원하므로 DbContext을 조사하고 있습니다.

Visual Studio의 '데이터베이스에서 모델 만들기'마법사를 통해 DbContext을 생성 할 수 있으며 테이블 연결이 올바르게 보입니다.

DbContext을 선언하고이를 프로젝트의 데이터 소스로 설정하면이 기능이 작동하고 레코드를 생성하면서 레코드가 생성됩니다. 원하는대로 객체를 사용하여 데이터를 조작 할 수 있습니다.

그러나 레코드는 데이터베이스와 공유되지 않습니다. 또한 데이터베이스의 데이터는 이런 방식으로 프로그램에 전송되지 않습니다. 예 : SQL Server Express 내에서 작성된 기존 레코드는 데이터베이스에 직접 링크 할 경우 시작시 포함되지 않습니다.

실제로 DbContext을 사용하여 기존 데이터베이스 정보를 받고 새/업데이트 된 데이터를 다시 SQL Server 데이터베이스로 보내려면 어떻게해야합니까?

간단한 답이 있어야하며 이미 여기에있을 가능성이 있습니다. 나는 그것이 내가 질문을 명확하게 묻는 방법을 모르는 새로운 것이기 때문에 내가 찾고있는 구체적인 대답을 찾기가 약간 어렵다.

왜 데이터를 공유하지 않습니까? 내가 간과하고있는 명령이 있습니까?

건배 당신이 당신의 익스프레스 에디션 데이터베이스 내에서 SQL Server 관리 Studio에서 데이터베이스를 작성한 경우

+0

EF 모델 (DbContext)에서 사용중인 연결 문자열을 자세히 살펴보십시오. –

+1

감사합니다. 친구, 그건 내 문제가 아니라는 것이 밝혀졌습니다. 그러나 나는 (당신이 제안한) 연결 문자열을 탐색하고 그것이 의미하는 바를 찾아내는 데 약간의 시간을 보냈습니다. 나는 그렇게하지 않았을 것이다. 다시 건배. – Kezzla

+0

StackOverflow에 오신 것을 환영합니다. #SOReadyToHelp –

답변

1

, 다음 가장 가능성이 당신이 .\SQLEXPRESS 또는 (local)\SQLEXPRESS의 서버/인스턴스 이름으로 액세스 할 수있는 SQL 서버의 SQLEXPRESS 인스턴스에서 저장된 또는 YourPcName\SQLEXRPESS.

그러나 Visual Studio는 SQL Server Express의 개발자 지향 "버전"인 LocalDB 인스턴스를 사용하는 경향이 있으므로 연결 문자열은 (localdb)\v11.0 또는 이와 비슷한 내용을 사용합니다. 기본적으로 전체 인스턴스가 서로 연결됩니다. SQL Server의.

당신이 당신의 데이터베이스의 SQLEXPRESS 인스턴스를 사용하려면 - 당신은 SQL 서버 관리 도구를 사용하여 만든 하나 - 그럼 그냥 (local)\SQLEXPRESS을 사용 (일반적으로 web.config 파일에) 확실히 당신의 엔티티 프레임 워크 연결 문자열을 연결 문자열의 data source= (또는 server=) 매개 변수로

+0

감사합니다. 메이트, 내 문제도 아니었지만, 이전 답변과 마찬가지로 내 프로젝트가 데이터 소스를 어디서 어디서 가져 왔는지 조사했습니다. 다시 건배. – Kezzla

0

누군가에게 도움이되는 몇 가지 좋은 제안이 여기에 있습니다. SQL 데이터베이스에서 데이터를 수동으로로드하고 저장해야한다는 것을 알지 못했습니다.

DbSet을 만들고 엔티티 테이블과 동일하게 설정해야했습니다. 예를 들어

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

using System.Data.Entity; 
namespace Gui_mockups 
{ 
    public partial class Form1 : Form 
{ 
    Lab_Assistant_backendEntities Database; 
    DbSet data; 



    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Database = new Lab_Assistant_backendEntities(); 
     data = Database.Sample_Register; 
     data.Load(); 
     sample_RegisterBindingSource.DataSource = data.Local; 

    } 

    private void sample_RegisterBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
    { 
     Database.SaveChanges(); 
    } 
} 

그래서, 나는 DbSet에 테이블을 반송하기 위해 필요한 다음 BindingSource.DataSource

이 당신이 SQL 데이터에 액세스 할 수있을하는 DbSet을 설정합니다.

새 레코드를 저장하려면 엔터티 프레임 워크 개체에 .SaveChanges() 메서드를 사용하십시오.

다른 멍청한 사람들에게 내 조언은 엔티티 프레임 워크가 SQL 테이블에 연결되어 있지만 이것이 데이터가 자동으로 링크된다는 것을 의미하지 않는다는 것을 이해하는 것입니다. 데이터베이스 (및 오브젝트)를 갱신하기 위해 정보를로드하고 저장해야합니다.