【问题标题】:How to connect to the mdf database?如何连接到 mdf 数据库?
【发布时间】:2020-02-14 10:37:44
【问题描述】:

使用者:

  • WPF 框架;
  • 实体框架。

我收到_studBindList.Count = 0

如何连接mdf数据库?

Category.cs

using System.ComponentModel.DataAnnotations.Schema;

namespace WpfAppFrm
{
    [Table("Categories")]
    public class Category
    {        
        public Category()
        {
            // this.Products = new ObservableCollection<Product>();
        }

        public int CategoryId { get; set; }
        public string Name { get; set; }

        // public virtual ObservableCollection<Product> Products { get; private set; }

    }
}

ProductContext.cs

using System.Data.Entity;

namespace WpfAppFrm
{
    public class ProductContext : DbContext
    {
        // public ProductContext() : base("DefaultConnection")
        public ProductContext(string сonnectionString)
        {

        }

        public DbSet<Category> Categories { get; set; }
        // public DbSet<Product> Products { get; set; }
    }
}

MainWindow.xaml.cs

//
using System.ComponentModel;
using System.Data.Entity;

namespace WpfAppFrm
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // public static string сonnectionString = @"C:\test\DB\NorthwindC.mdf";
        public static string сonnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\test\DB\NorthwindC.mdf;Integrated Security=True;Connect Timeout=30";
        private ProductContext _context = new ProductContext(сonnectionString);

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
            try
            {
                System.Windows.Data.CollectionViewSource categoryViewSource =
            ((System.Windows.Data.CollectionViewSource)(this.FindResource("categoryViewSource")));

                _context.Categories.Load();

                BindingList<Category> _studBindList = _context.Categories.Local.ToBindingList();

                categoryViewSource.Source = _context.Categories.Local;
            }
            catch (Exception ex)
            {

                throw;
            }
        }
    }
}

MainWindow.xaml

<Window x:Class="WpfAppFrm.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfAppFrm"
        mc:Ignorable="d"
        Title="MainWindow" Height="443.317" Width="243.069" Loaded="Window_Loaded_1">
        <Window.Resources>
            <CollectionViewSource x:Key="categoryViewSource"
                                d:DesignSource="{d:DesignInstance {x:Type local:Category}, CreateList=True}"/>
            <CollectionViewSource x:Key="categoryProductsViewSource" Source="{Binding Products, Source={StaticResource categoryViewSource}}"/>
        </Window.Resources>
    <Grid DataContext="{StaticResource categoryViewSource}" Margin="0,0,28,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="0*"/>
            <ColumnDefinition Width="0*"/>
        </Grid.ColumnDefinitions>
        <DataGrid x:Name="categoryDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True"
                    ItemsSource="{Binding}" Margin="13,13,3,257"
                    RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="categoryIdColumn" Binding="{Binding CategoryId}"
                                    Header="CategoryId" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}"
                                    Header="Name" Width="SizeToHeader"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

SQL 表Categories

CREATE TABLE [dbo].[Categories] (
    [CategoryId] INT           IDENTITY (1, 1) NOT NULL,
    [Name]       NVARCHAR (40) NULL,
    PRIMARY KEY CLUSTERED ([CategoryId] ASC)
);

图片1


更新-1

图片2


更新-2

新增方法:

  • 添加实体();
  • GetAll();

方法AddEntity()

 public void AddEntity()
    {
        Category category = new Category
        {
            Name = "Name_Category_4"
        };

        _context.Categories.Add(category);
        _context.SaveChanges();
    }

方法GetAll()

public void GetAll()
        {
            _context.Categories.Load();

            BindingList<Category> _studBindList = _context.Categories.Local.ToBindingList();
        }

我进行了两次调试。
当我第二次调试时,我做了一张图片。

图片3

【问题讨论】:

  • 是什么让你认为数据库表中有任何条目?您是否向该特定数据库添加了任何内容?
  • @mm8 1.Picture-12. 一般来说,我的代码是否正确?
  • 图片不多说了。你真的在查询 C:\test\DB\NorthwindC.mdf 而不是一些本地副本吗?
  • @mm8 1.Update-1。我设法回答了你的问题吗? 2. 一般来说,我的代码应该可以工作吗?
  • 尝试以编程方式添加新实体,然后加载所有实体。那么你应该要么得到一个错误,要么找到它。

标签: c# wpf entity-framework


【解决方案1】:

.mdf 是 SQL Server 使用的文件格式。您不能直接连接到这样的文件。相反,您需要将该文件作为数据库导入 SQL Server(如果您没有 SQL Server,您也必须安装它)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多