Я искал в Google и Stack Overflow для этой проблемы, которую у меня есть. К сожалению, я не могу найти правильный ответ на мою проблему.C# Свойство get set не устанавливает значение
Вначале я буду показывать свои классы и App.config.
Класс: Form1: Form
public partial class Form1 : Form
{
Database db = new Database();
public Form1()
{
InitializeComponent();
db.Test();
}
private void Form1_Load(object sender, EventArgs e)
{
db.MdfConnectionString = ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString;
}
}
Класс: База данных
class Database
{
private string _mdfConnectionString;
public string MdfConnectionString
{
get { return this._mdfConnectionString; }
set { this._mdfConnectionString = value; }
}
public void Test()
{
MessageBox.Show(_mdfConnectionString);
}
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="MDFConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Database\AutoFill.mdf;Integrated Security=True;ApplicationIntent=ReadOnly" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
В моем классе Database.cs У меня есть MessageBox.Show (_mdfConnectionString);, который покажет приватную строку (поле поддержки), но по какой-то нечетной причине _mdfConnectionString всегда имеет значение null.
Я объявил в своем классе Form1: Form, что ему нужно загрузить строку подключения в моем App.config.
Не забудьте упомянуть, что ConfigurationManager.ConnectionStrings ["MDFConnection"]. ConnectionString; сам возвращает значение, так что здесь не проблема.
Надеюсь, что кто-то может помочь мне в решении этой проблемы.
EDIT 1
Изменен код, чтобы сделать его более понятным для людей. Также ExecuteQuery не имеет значения, поэтому я сделал простой метод в классе Database.cs, вызывающем Message Box.
Также исполняемые и Exe.config находятся в одной и той же папке во время выполнения.
Первое, что нужно узнать, это автоматически реализуемые свойства - вы можете избавиться от объявления своего поля и переписать свое свойство как 'public string MdfConnectionString {get; задавать; } ' –
Вы отлаживали код, чтобы узнать, действительно ли ваш метод Form1_Load? Вы проверили, что это связано с событием? Возможно, вы используете 'db' до того, как форма закончила загрузку? –
Вызывается Form_Load1, используется Message Box и точки останова. Я попытаюсь использовать свойства Auto-Implement. – Roemy