DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MVC3 でdbアクセスでエラー

環境/言語:[Windows 7/Vista MS2010 C# Webアプリ]
分類:[ASP.NET]

お世話になります。

MVC3を使ってWebアプリを勉強しています。(aspxでなくrazorを利用)
ここで、Model内でのDBにアクセスする内容がよくわかりません。
参考にしたサイトは、「http://d.hatena.ne.jp/shiba-yan/20110208/1297096899」で、リポジトリパターンを利用してアクセスしようとしています。これを選択した理由は、ありませんが、たまたま読んでいた、わかりやすかったページがこの方式だったということです。

そこで出るメッセージは、
「Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.」
ググってみると幾つかヒットしますが、要は、ここで行っている方法では、読めないとか正しいコード?(メタデータ)がない、っていうことのようです。

では、その部分は、どこにあるのでしょか?なにやら、サンプル内では、自動で「Select・・・」が作られているみたいですが・・・・

このアプリでは、すでに存在するファイル「***.mdf」を読みだしたいです。

Web.config
<connectionStrings>
<add name="HolterContext"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Holter.mdf;User Instance=true"
providerName="System.Data.SqlClient"/>

protected void Application_Start()
{
:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<HolterContext>());
}

namespace Holterweb.Models
{
public class HolterContext : DbContext
{
public DbSet<Holter> Holters { get; set; }
}
}

namespace Holterweb.Models
{
public class HolterRepository : IDataRepository
{
private readonly HolterContext _context = new HolterContext(); <- ここが最初に呼ばれる


次に下記が呼ばれて
public class HolterController : Controller
{
public HolterController(): this(new HolterRepository())
{
// ここで、元コードは、Select・・があるようですが、
// 私のコードは、なく上記エラーメッセージが見られる。
}

public HolterController(IDataRepository videoRepository)
{
_videoRepository = videoRepository;

}

private readonly IDataRepository _videoRepository;


public class Holter
{
[Key]
public int No { get; set; }

//[Required]
[DisplayName("顧客名")]
public string UserID { get; set; }

  :
長文で失礼しました。よろしくお願いします。
自己レスです。うまくいったわけではありませんが、その後に分かったとこです。

1.public DbSet<Holter> Holters { get; set; }の<>内の名前に***.mdfの***だと思ってましたが、その中のテーブル名でした。(思い違い)
namespace Holterweb.Models
{
public class HolterContext : DbContext
{
public DbSet<Holter> Holters { get; set; } <- <ここは、テーブル名だった>
}
}

2.Web.Configが下記だと「Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.」
<add name="HolterContext"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Holter.mdf;User Instance=true"
providerName="System.Data.SqlClient"/>

でこれをそこし書き換えて(DB名を存在しない名前に変更しInitial Catalogも追加してみた。上記エラーは、すでに存在しているDB名)
<add name="HolterContext"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|HolterNew.mdf;Initial Catalog=HolterNew" <- HolterNew は、存在していない
providerName="System.Data.SqlClient"/>
「オペレーティング システム エラー 5(アクセスが拒否されました。) により、ファイル "C:\Users\SL_7\Documents\Visual Studio 2010\Projects\Holterweb\Holterweb\App_Data\HolterNew.mdf" のディレクトリ参照に失敗しました。
CREATE DATABASE が失敗しました。一覧されたファイル名の一部を作成できませんでした。関連するエラーを確認してください。」

というエラーに変わりました。

アクセス権のような問題ですが、このフォルダー(App_Data)には、ユーザーやuser\adminには、フルコントロールにしてあります。

何が考えられますか?

DOBON.NET | プログラミング道 | プログラミング掲示板