こんにちは、私は WPF と C# にかなり慣れていません。
私は VS2012、Entity Framework を使用して既存のデータベースのモデルを作成しています。いくつかのテーブルをいくつかの ListView にバインドしたいと考えています。 ObjectDataProvider 設計時に「アプリケーション構成ファイルに ... という名前の接続文字列が見つかりませんでした」というエラーが表示されます。
奇妙なことに、アプリケーションを実行するとすべてが正常に機能し、その醜いエラー メッセージを削除し、できればリスト広告のデザイン時にデータを取得したいと考えています (それが objectdataprovider を使用したい理由です)。
ここに私のコードのいくつかの部分があります:
App.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BibliotecaEntities"
connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;attachdbfilename="G:\PROGETTI-SOFTWARE\c# tests\Biblioteca\Biblioteca\biblioteca-db.mdf";initial catalog=BibliotecaDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework'"
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
ListaScaffali.xaml:
<Window x:Class="Biblioteca.ShelvesList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Biblioteca;assembly="
Title="ShelvesList" Height="341" Width="609">
<Window.Resources>
<ObjectDataProvider ObjectType="{x:Type local:BooksDB_Handler}" MethodName="TuttiGliScaffali" x:Key="ScaffaliObjSrc" />
</Window.Resources>
<Grid>
<Grid>
<ListView Name="listaScaffali" ItemsSource="{Binding Source={StaticResource ScaffaliObjSrc}}">
<ListView.View>
<GridView>
<GridViewColumn Header="Scaffali Disponibili:" DisplayMemberBinding="{Binding Scaffale}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</Grid>
</Window>
BooksDB-Handler.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.Entity;
using System.Collections.ObjectModel;
namespace Biblioteca
{
public static class BooksDB_Handler
{
...
public static ObservableCollection<Scaffali> TuttiGliScaffali()
{
using (var ctx = new BibliotecaEntities())
{
var reader = from d in ctx.Scaffali
select d;
return new ObservableCollection<Scaffali>(reader);
}
}
...
}
}
私のDBでは、テーブル「Scaffali」には「ScaffaliID」(アイデンティティ)と「Scaffale」の2つの列しかありません。
これは Visual Studio のバグである可能性があることをどこかで読み、さまざまなことを試しました。
- 何度か作り直す
- パスで # を避ける
- 32ビット用にコンパイルします(Win8 x64を実行しています)
しかし、今まで運がなかった...
親切な回答ありがとうございます。
-= 2013 年 4 月 3 日更新 =-
これまでのところ、この奇妙な動作の原因となっている条件をまだ見つけていませんが、とにかく、ビルドする (再ビルドしない) を 2 回続けて実行すると、エラー メッセージが消えて、すべてが正常に動作するように見えることがわかりました...