【问题标题】:Why is the application not using my connection string?为什么应用程序不使用我的连接字符串?
【发布时间】:2020-02-16 19:19:46
【问题描述】:

问题。
为什么应用程序不使用我的连接字符串?

使用者:

  • 服务器 - (LocalDB) \MSSQLLocalDB;
  • 实体框架 (EF);
  • WPF 框架。

    目标。
    使应用程序使用数据库NORTHWINDC.MDF

说明。
我正在传递一个连接字符串
сonnectionStringStart = @" Data Source = (localdb)\mssqllocaldb; Initial Catalog = NORTHWINDC.MDF; Integrated Security = True; MultipleActiveResultSets = True ";
进入类的构造函数
class ProductContext: DbContext.

我正在运行应用程序。
我得到一个连接字符串: Data Source=(localdb)\mssqllocaldb;Initial Catalog=WpfAppFrm.ProductContext;Integrated Security=True;MultipleActiveResultSets=True

结果。
应用程序创建数据库WpfAppFrm.ProductContext,并且每次运行时都使用数据库WpfAppFrm.ProductContext

Category.cs

// 
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
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 string ConnectionString_test { get; set; }
        public ProductContext(string сonnectionString)
        {
            this.ConnectionString_test = с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 сonnectionStringStart;
        private ProductContext _context;

        public MainWindow()
        {
            InitializeComponent();

            сonnectionStringStart = @"Data Source=(localdb)\mssqllocaldb;Initial Catalog=NORTHWINDC.MDF;Integrated Security=True;MultipleActiveResultSets=True";
            _context = new ProductContext(сonnectionStringStart);
        }

        private void Window_Loaded(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;

                AddEntity();
                // GetAll();
                string сonnectionStringStartDuplicate = сonnectionStringStart;
                string connectionStringResult1 = _context.Database.Connection.ConnectionString;
                string connectionStringResult2 = _context.ConnectionString_test;
            }
            catch (Exception ex)
            {
                throw;
            }
        }

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

            _context.Categories.Add(category);
            string connectionString_str = _context.Database.Connection.ConnectionString;
            _context.SaveChanges();
        }

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

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

安装实体框架

数据库NORTHWINDC.MDF

数据库WpfAppFrm.ProductContext

调试应用的结果。

申请结果。

应用程序树。

【问题讨论】:

    标签: c# wpf entity-framework


    【解决方案1】:

    而不是像这里那样拥有存储连接字符串的属性

    public string ConnectionString_test { get; set; }
    public ProductContext(string сonnectionString)
    {
        this.ConnectionString_test = сonnectionString;
    }
    

    您需要将连接字符串传递给DbContext的基本构造函数,它实际上使用它

    public ProductContext(string сonnectionString) : base(connectionString)
    {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2016-06-01
      相关资源
      最近更新 更多