如何获取SQL Server Express数据库和DbContext对象以共享数据?

问题描述:

我仍然很新,所以希望这是一个快速解决方案。如何获取SQL Server Express数据库和DbContext对象以共享数据?

我有一个通过Microsoft SQL Server Express创建的SQL Server Express数据库。我正在使用Visual Studio社区版。

我想创建一个简单的程序来输入/检索/操作数据库信息。

如果我将我的数据库设置为程序数据源,然后将表单控制器绑定到数据库表,那么表单控件将显示数据库表中的记录。没有问题,但我希望能够在程序内轻松使用数据,所以我正在调查DbContext

我可以通过Visual Studio的'从数据库创建模型'向导生成DbContext就好了,它的表链接看起来是正确的。

如果我声明DbContext,然后将其设置为项目的数据源,则此作品和记录会在创建时生成。我可以使用这些对象来操纵我想要的数据。

但是记录不与数据库共享。此外,数据库中的数据不会以这种方式发送到程序中。例如,在SQL Server Express中创建的现有记录在启动时不包含,因为它们会直接链接到数据库。

您是否知道我怎样才能真正使用DbContext来接收现有的数据库信息并将新的/更新的数据发送回SQL Server数据库?

必须有一个简单的答案,它可能已经在这里。当我还很新,我不知道如何明确地提出问题时,我发现我很难找到具体的答案。

他们为什么不共享数据?有一些我忽略的命令吗?

干杯

+0

仔细查看EF模型(DbContext)正在使用的连接字符串。 –

+1

谢谢伙伴,原来,这不是我的问题。不过,我花了一些时间(正如你所建议的那样)探索连接字符串并找出它的含义。否则我不会那样做。再次欢呼。 – Kezzla

+0

欢迎来到*。 #SOReadyToHelp –

如果在SQL Server Management Studio中创建数据库的Express版本的数据库中,那么最有可能它存储在SQL Server的SQLEXPRESS例如,你可以用.\SQLEXPRESS(local)\SQLEXPRESS服务器/实例名称访问或YourPcName\SQLEXRPESS

但是Visual Studio倾向于使用SQL Server Express的实例 - 面向开发人员的SQL Server版本 - 因此您的连接字符串可能使用类似(localdb)\v11.0之类的东西 - 基本上连接到一个完全不同的实例的SQL Server。

如果你想使用你的数据库的SQLEXPRESS实例 - 你与SQL Server管理工具创建的 - 那么只需要确保你的实体框架的连接字符串(通常在web.config文件)使用(local)\SQLEXPRESS作为data source=(或server=)连接字符串中的参数

+0

谢谢伙伴,事实证明这也不是我的问题,但像以前的答案,它让我看看我的项目是从哪里获取其数据源。再次欢呼。 – Kezzla

这里有一些很好的建议可以帮助某人。就目前而言,我并没有意识到我不得不手动加载和保存来自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,然后设置DbSet是BindingSource.DataSource

这将允许您访问SQL数据。

保存新记录对实体框架对象使用.SaveChanges()方法。

我对其他noobs的建议是要明白,虽然您的实体框架链接到您的SQL表,但这并不意味着数据会自动链接。您仍然需要自己加载和保存信息以更新数据库(和对象)。