2

ASP.netMVC3環境でEntityFrameworkでAdvantageDatabaseServer(ADS Ver.9.1)を処理する必要があります。

私はすでにこれだけのためにほぼ2週間を費やしました:(しかしそれでも私は答えを見つけることができませんでした。

正しいアドバイスを得るために、私はどのようにそして何をしたかを段階的に示すように努めます。ですから、私が犯した間違いを見つけたり、私が試すことができることを知っている場合は、私にアドバイスしてください。plz ..

まず、ADSでTESTテーブルを作成しました。

CREATE TABLE TEST ( 
      ID AutoInc,
      Name CIChar( 50 )) IN DATABASE;

IDを主キーとして定義します。

ここに画像の説明を入力してください

そして、コンソールアプリケーションを使用してこのテーブルにアクセスしようとしました。

Visual Studio 2010を使用して、新しいコンソールアプリケーション(C#)を作成します

そして私はこのようにタイプしました、

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Advantage.Data.Provider;

namespace Ads_Console_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            AdsConnection conn = new AdsConnection("Data Source=\\\\10.0.111.4:6262\\20090622\\SHK\\SHK.ADD;ServerType=REMOTE;User ID=AdsSys;Password=XXXXX;");
            AdsCommand cmd;
            AdsDataReader reader;
            int iField;

            try
            {
                // make the connection to the server
                conn.Open();

                // create a command object
                cmd = conn.CreateCommand();

                // specify a simple SELECT statement
                cmd.CommandText = "select * from TEST";

                // execute the statement and create a reader
                reader = cmd.ExecuteReader();

                // dump the results of the query to the console
                while (reader.Read())
                {
                    for (iField = 0; iField < reader.FieldCount; iField++)
                        Console.Write(reader.GetValue(iField) + " ");
                    Console.WriteLine();
                }

                // close the reader (can’t execute other statements
                // on this command or connection) until it is closed
                reader.Close();
                conn.Close();
            }
            catch (AdsException e)
            {
                // print the exception message
                Console.WriteLine(e.Message);
            }

            Console.ReadKey();    
        }
    }
}

実行すると、ADSに正常に接続し、データも取得します。

ここに画像の説明を入力してください

ご覧のとおり、テーブルには3つの行があります。

今、

EntityFrameworkを使用してADSにアクセスしてみます。(MVC3)

MVC3フレームワークで新しいプロジェクトを作成します。空のテンプレートを選択しました。

MVC3フレームワークで新しいプロジェクトを作成します。 空のテンプレートを選択しました。

そして、Advantage.Data.ProviderをReferenceに追加します。

ここに画像の説明を入力してください

次に、Web.Config(root)ファイルを変更し、connectionStringsを追加します。

<connectionStrings>
    <add name="EFAdsContext" connectionString="Data Source=\\10.0.111.4:6262\20090622\SHK\SHK.ADD;ServerType=REMOTE;User ID=adsSys;Password=XXXXX;
         TrimTrailingSpaces=True;" providerName="Advantage.Data.Provider" />
  </connectionStrings>

そして、Modelsフォルダーに3つのクラスを作成しました。

  1. EFAdsContext.cs
  2. TestRepository.cs
  3. TEST.cs

これがコードです、

1. EFAdsContext.cs

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;


    namespace Ads_test_mvc3.Models
    {
        public class EFAdsContext : DbContext
        {
            public DbSet<TEST> TEST { get; set; }
        }
    }

2. TestRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Ads_test_mvc3.Models
{
    public class TestRepository
    {
        private EFAdsContext context = new EFAdsContext();

        public IQueryable<TEST> test
        {
            get { return context.TEST; }
        }
    }
}

3. TEST.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace Ads_test_mvc3.Models
{
    public class TEST
    {
        [Key]
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

そして、HomeControllers.csをControllersフォルダーに作成します。

HomeControllers.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Ads_test_mvc3.Models;

namespace Ads_test_mvc3.Controllers
{
    public class HomeController : Controller
    {
        public ViewResult Index()
        {

            TestRepository tests = new TestRepository();
            int cnt = tests.test.Count();


            ViewBag.cnt = cnt;
            return View();
        }

    }
}

そして最後にHomeControllerのビューを追加します

/Views/Home/Index.cshtml

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>


Cnt : @ViewBag.cnt

そして、このアプリケーションを実行し、

ここに画像の説明を入力してください

次に、このエラーメッセージが表示されます。= 3

私が知っているのは長い文章ですが、私はできるだけ詳細に書くようにしました。

誰かがこの問題を解決する方法を知っているなら、私に知らせてください。

ありがとうございました!

[スタックトレース]

[KeyNotFoundException: The given key was not present in the dictionary.]
   System.Collections.Generic.Dictionary`2.get_Item(TKey key) +9619597
   Advantage.Data.Provider.AdsProviderManifest.GetStoreType(TypeUsage edmType) +1150
   System.Data.Entity.ModelConfiguration.Edm.Services.StructuralTypeMappingGenerator.MapTableColumn(EdmProperty property, DbTableColumnMetadata tableColumnMetadata, Boolean isInstancePropertyOnDerivedType, Boolean isKeyProperty) +60
   System.Data.Entity.ModelConfiguration.Edm.Services.PropertyMappingGenerator.Generate(EdmEntityType entityType, IEnumerable`1 properties, DbEntitySetMapping entitySetMapping, DbEntityTypeMappingFragment entityTypeMappingFragment, IList`1 propertyPath, Boolean createNewColumn) +1293
   System.Data.Entity.ModelConfiguration.Edm.Services.EntityTypeMappingGenerator.Generate(EdmEntityType entityType, DbDatabaseMapping databaseMapping) +496
   System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.GenerateEntityTypes(EdmModel model, DbDatabaseMapping databaseMapping) +122
   System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.Generate(EdmModel model) +30
   System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) +189
   System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +58
   System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +62
   System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +117
   System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +453
   System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +18
   System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +57
   System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +15
   System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +37
   System.Linq.Queryable.Count(IQueryable`1 source) +50
   Ads_test_mvc3.Controllers.HomeController.Index() in C:\Users\mark\Documents\Visual Studio 2010\Projects\Ads_test_mvc3\Ads_test_mvc3\Controllers\HomeController.cs:20
   lambda_method(Closure , ControllerBase , Object[] ) +62
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
   System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
   System.Web.Mvc.Controller.ExecuteCore() +116
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8969117
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
4

0 に答える 0