0

「Code First」O'Reily の本から CustomConnectionFactory と PromptForDropCreateDatabaseWhenModelChages の「方法」を使用して MDF ファイルを作成します。ファイルは作成されますが、VS または SSMS からアクセスできません。VS サーバー エクスプローラーでツリービューを拡張して作成された DB テーブルとパラメーターを表示できますが、[データの表示] で次のエラーが表示されます: 「指定されたモジュールが見つかりませんでした。(HRESULT からの例外: 0x8007007E)」。このエラーを調べたところ、サーバーのアクセス許可に問題があるようですが、SSMS を最高のアクセス許可 (sysadmin、所有者など) に設定しても役に立ちませんでした。ファイル自体にパーミッションの問題があるのではないかと考えています。助けてくれてありがとう。

コードは次のとおりです。

アプリ.xaml.cs:

    protected override void OnStartup(StartupEventArgs e)
            {
                AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));
                Database.DefaultConnectionFactory = new CustomConnectionFactory();
                Database.SetInitializer(new PromptForDropCreateDatabaseWhenModelChages<AppEntities>());

                using (var context = new AppEntities())
                {
                    context.Clicks.Add(new MouseClick
                        {
                            DateTimeCreated = DateTime.Now,
                            DateTimeModified = DateTime.Now,
                            Id = 1,
                            IsActive = true,
                        });
                }


                var mainView = new MainView
                    {
                        DataContext = new ViewModelMain(new AppEntities())
                    };

                mainView.Show();
            }

CustomConnectionFactory.cs:

    class CustomConnectionFactory : IDbConnectionFactory
        {
            public DbConnection CreateConnection(string nameOrConnectionString)
            {
                var name = nameOrConnectionString.Split('.').Last().Replace("Entities", string.Empty);

                var builder = new SqlConnectionStringBuilder
                {
                    DataSource = @".\SQLEXPRESS",
                    AttachDBFilename = @"|DataDirectory|\App.mdf",
                    InitialCatalog = name,
                    IntegratedSecurity = true,
                    MultipleActiveResultSets = true,
                    UserInstance = true
                };
                return new SqlConnection(builder.ToString());
            }
        }

PromptForDropCreateDatabaseWhenModelChanges.cs:

public class PromptForDropCreateDatabaseWhenModelChages<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
    {
        public void InitializeDatabase(TContext context)
        {
            var exists = context.Database.Exists();

            if (exists && context.Database.CompatibleWithModel(true))
            {
                return;
            }

            if (exists && context.Database.CompatibleWithModel(false))
            {
                context.Database.Delete();
            }

            context.Database.Create();
        }
    }
4

1 に答える 1

0

自宅のコンピューターで同じものを再作成した後、すべて正常に動作します。職場でいくつかのネットワーク制限があるようです。

于 2013-08-29T12:32:46.993 に答える