5

1 日前、単純な Windows フォーム プロジェクト (C#) で Entity Framework CodeFirst の使用を開始しました。2 つのモデルを作成しました。

[Table("SavesSet")]
public partial class Saves
{
    public Saves()
    {
        this.SkillsSet = new HashSet<Skills>();
    }

    [Key]
    public int SaveID { get; set; }

    public string Player { get; set; }
    public int Age { get; set; }
    public int Money { get; set; }

    public virtual ICollection<Skills> SkillsSet { get; set; }
}

[Table("SkillsSet")]
public partial class Skills
{
    [Key]
    public int SkillID { get; set; }

    public string Name { get; set; }
    public int Value { get; set; }
    public int SavesSaveID { get; set; }

    public virtual Saves SavesSet { get; set; }
}

次に、Visual Studio データベース エクスプローラー (SqlServerCe 3.5 を使用したローカル データベース) を使用して、データベースに 1 つの行を追加しました。

保存 ID = 1

プレイヤー=「テスト」

年齢 = 1

お金 = 1

また、ListView を使用してフォームを作成し、いくつかのコードを記述しました。

private SavesContext db = new SavesContext();
foreach (Saves s in db.SavesSet.ToList())
{
    ListViewItem l = new ListViewItem();
    l.Name = s.SaveID.ToString();
    l.Text = s.Player;
    ListViewSaves.Items.Add(l);
}

しかし、プログラムのデバッグを開始したとき、ListView は空でした。ブレークポイントを設定し、ローカル変数を表示したところ、SavesSet カウントが 0 であることがわかりました。

コードで1行追加しました:

Saves s = new Saves();
s.Player = "TestName";
s.Age = 5110;
s.Money = 200;
db.SavesSet.Add(s);
db.SaveChanges();

そして、ListViewはこれを表示しました。しかし、私のデータベースには何もありませんでした (そしてそのサイズは変わりませんでした)。Visual Studio を再起動しましたが、問題はまだ現実のものでした: ListView にはアイテムが表示されますが、データベースは空でした。App.Config と VS Database Explorer で ConnectionString を確認しました - それらは同じでした。

私の質問は次のとおりです。実際のデータベースを探索するにはどうすればよいですか?また、データベースはどこに保存されますか?

アップデート。

私のDbContext:

    public SavesContext()
        : base("Saves")
    {
    }

    public DbSet<Saves> SavesSet { get; set; }
    public DbSet<Skills> SkillsSet { get; set; }

そして私の App.Config:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="TextSim.Properties.Settings.Saves" connectionString="Data          
            Source=C:\Documents and Settings\My\My Documents\visual studio       
            2010\Projects\TextSim\TextSim\Saves.sdf"
            providerName="System.Data.SqlServerCe.3.5" />
        </connectionStrings>
     </configuration>
4

1 に答える 1

1

Entity Framework は、Convention over configuration と呼ばれるものを使用します。つまり、特定のものに値を指定しない場合、既定値が使用されます。

接続文字列を指定しない場合、EF の名前空間と DbContext 名から派生した既定の接続文字列が使用されます。この場合、既定のシステムを使用して新しい (空の) データベースが作成され、Web.Config で構成した可能性のあるシステムは使用されません。

したがって、物事を保存すると、間違ったデータベースに保存されます。

于 2012-10-07T19:50:04.150 に答える