koverflow
koverflow

Reputation: 327

Why is the application not using my connection string?

Question.
Why is the application not using my connection string?  

Used by:

Description.
 I am passing a connection string
сonnectionStringStart = @" Data Source = (localdb)\mssqllocaldb; Initial Catalog = NORTHWINDC.MDF; Integrated Security = True; MultipleActiveResultSets = True ";
into the constructor of the class
class ProductContext: DbContext.

 I am running the application.
 I get a connection string: Data Source=(localdb)\mssqllocaldb;Initial Catalog=WpfAppFrm.ProductContext;Integrated Security=True;MultipleActiveResultSets=True

  Result.
The application creates the database WpfAppFrm.ProductContext and each time it runs it works with the databaseWpfAppFrm.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();
        }
    }
}

  Installing the Entity Framework enter image description here

Database NORTHWINDC.MDF enter image description here

Database WpfAppFrm.ProductContext enter image description here

The result of debugging the application. enter image description here

The result of the application.
enter image description here

Application tree.
enter image description here

Upvotes: 0

Views: 110

Answers (1)

Yehor Androsov
Yehor Androsov

Reputation: 6162

Instead of having property to store connection string like here

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

you need to pass connection string to the base constructor of DbContext, which actually uses it

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

Upvotes: 2

Related Questions