2016-10-21 8 views
3

私はASP.Net MVCでウェブサイトを作成しています。私は2つの異なるデータベースにアクセスする必要があります。私は現在、web.configファイル内にそれぞれ独自の接続文字列を持つ2つの.edmxファイルを使用しています。私は、必要な属性を持つ私の異なるテーブルを記述する1つのメタデータファイルを持っています。私の問題は、コントローラに、私は両方のdbので動作するようにしようとしていますということですが、私はこのエラーを取得しておいてください。複数の.edmxを単一のAsp.Net MVCアプリ

The entity type <object2Metadata> is not part of the model for the current context. 

私は、このようなVARを使用してのみ、特にとき、私のオブジェクトを入力すると、私は考えることができるすべてのものを試してみましたそのエラーは、コードを別のステップでポップアップさせることになりますが、それを正しく行おうと努力しても問題はありません。

私が達成しようとしていること:2つの異なるデータベースに2つのテーブルがあり、それらの電子メールを比較し、1つのテーブルにあるが他のテーブルにはないすべての電子メールアカウントを取得し、リスト内の対応するオブジェクト

これらをオブジェクトにマップするメタデータをプロジェクトに作成しました。オブジェクトは同じではなく、互いに対応するようにマップすることはできません。object2にはobject1に存在しない属性があり、対応するフィールドがないため、object2をobject1に変換して実行できません比較。私はちょうど各オブジェクトから電子メールを引き出して、それぞれのオブジェクトを自分のリストに入れて、それらを比較し、その違いを得ようとしました。これはうまくいきますが、私がdb2に再度アクセスして、それらの電子メールを持つオブジェクトを引き出すと、私は再びそのエラーを受け取ります。私はその2番目のdbを使用しようとすると、エラーが発生するようです。私は自分の接続文字列をチェックしていて、正しいものです。それは私が最初のオブジェクトをdb2から入れて、var ... soに入れてしまいます。接続文字列が動作することがわかりますが、db2からデータを操作しようとするとエラーが発生するようです。

私は研究を行っており、私の特定の問題に答えるものは何も見つかりません。 など:Multiple edmx in one projectまたはHow to create multiple edmx in same project

namespace project.Controllers 
{ 
    public class myController: Controller 
    { 
     //both these statements compute just fine with no errors. 
     private db1Entities db = new db1Entities(); 
     private db2Entities adb = new db2Entities(); 

     // GET: Exchange 
     public ActionResult Index(int? page) 
     { 
      //Getting my initial lists from the db's 
      //Both these statements compute with no errors as well 
      var mbe = db.table1.AsEnumerable().ToList(); 
      var abe = adb.table2.AsEnumerable().ToList(); 

      //This list would be used for me to convert Obj2 into Obj1 
      List<object1> abeConverted = new List<object1>(); 

      //This list would then hold the items in List<obj2> that aren't 
      //in List<obj1> 
      List<object1> abeDiff = new List<object1>(); 

     ////Here's where I was going to try to just filter by email 
     //List<string> mbeEmails = new List<string>(); 
     //List<string> abeEmails = new List<string>();    

     //Here is where I actually converted obj2 into obj1-no error here 
     foreach (object2 a in abe) 
     { 
      object1 m = new object1(); 
      m.pk_email = a.mail; 

      if (a.secureMail.Equals('F')) 
       m.isSecure = false; 
      else 
       m.isSecure = true; 

      m.jobCode = null; 
      m.workOrder = null; 
      m.isDisabled = false; 
      m.isNonBillable = false; 
      m.createdDate = a.createdDate; 

      abeConverted.Add(m); 
     } 

     //Here's where I would have extracted emails to lists from obj's 
     //foreach (var m in mbe) 
     //{ 
     // string e = ""; 
     // e = m.pk_email; 
     // mbeEmails.Add(e); 
     //} 

     //foreach (var a in abe) 
     //{ 
     // string e = ""; 
     // e = a.mail; 
     // abeEmails.Add(e); 
     //} 

     ////Email lists compare to get differences    
     //List<string> diffEmails = (from a in abeEmails 
     //     join m in mbeEmails on a equals m into d 
     //     from od in d.DefaultIfEmpty() 
     //     where od == null 
     //     select a).ToList<string>(); 

     //compare to get differecnes by objects after the obj2 convert 
     //Here is where the error pops up by using this approach. 
     abeDiff = (from a in abeConverted 
        join m in mbe on a.pk_email equals m.pk_email into d 
        from od in d.DefaultIfEmpty() 
        where od == null 
        select a).ToList(); 

     //This would be used if needed to get the objects after the email 
     //compare. Here is where the error pops up using this filtered 
     //emails approach. 
     //foreach (string e in diffEmails) 
     //{ 
     // object2 a = new object2(); 
     // a = abe.Where(b => b.mail == e).FirstOrDefault(); 
     // abeDiff.Add(a); 
     //} 

     //Turning my list into a pagedList object for the view 
     int pageSize = 20; 
     int pageNumber = (page ?? 1); 

     var abePage = abeDiff.OrderBy(a => 
      a.pk_email).ToPagedList(pageNumber, pageSize); 

     ViewBag.abePage = abePage; 
     return View(abeDiff.OrderBy(a => 
      a.pk_email).ToPagedList(pageNumber, pageSize)); 

     } 
    } 
} //end Controller 

ここでは、2つのオブジェクトのための私のメタデータです - -

namespace project.Models 
{ 
    public class Metadata 
    { 
    } 

    public class object1Metadata 
    { 
    [Display(Name = "Email")] 
    [Required] 
    public string pk_email { get; set; } 

    [Display(Name = "Job Code")] 
    [Required] 
    public string jobCode { get; set; } 

    [Display(Name = "Work Order")] 
    [Required] 
    public string workOrder { get; set; } 

    [Display(Name = "Secure?")] 
    [Required] 
    public bool isSecure { get; set; } 

    [Display(Name = "Disabled?")] 
    public bool isDisabled { get; set; } 

    [Display(Name = "Non-Billable?")] 
    [Required] 
    public bool isNonBillable { get; set; } 

    [Display(Name = "Date Created")] 
    [Required] 
    public DateTime createdDate { get; set; } 
    } 

    public class object2Metadata 
    { 
    //[Display(Name = "ID")] 
    //public double Id { get; set; } 

    [Display(Name = "Department Number")] 
    public string departmentNumber { get; set; } 

    [Display(Name = "Division")] 
    public string division { get; set; } 

    [Display(Name = "Agency")] 
    public string agency { get; set; } 

    [Display(Name = "Department Name")] 
    public string departmentName { get; set; } 

    [Display(Name = "Name")] 
    public string name { get; set; } 

    [Display(Name = "Email")] 
    public string mail { get; set; } 

    [Display(Name = "Size")] 
    public string mbSize { get; set; } 

    [Display(Name = "Distinguished Name")] 
    public string distinguishedName { get; set; } 

    [Display(Name = "Instant Messaging")] 
    public string instantMessaging { get; set; } 

    [Display(Name = "Secure Mail")] 
    public string secureMail { get; set; } 

    [Display(Name = "Account Type")] 
    public string typeOfAccount { get; set; } 

    [Display(Name = "Extract Date")] 
    public DateTime extractDate { get; set; } 

    [Display(Name = "Created Date")] 
    public DateTime createdDate { get; set; } 
    } 
    } 

長い質問には申し訳ありませんが、I以来 コントローラー:ここ

は、私が何をしてきたいくつかのコード例であり、私が何をやっているのか、どうやって正確に記述したかったのかは分かりません。私は私のコントローラーでコメントされたコードがたくさんあります。私が試したさまざまなことをあなたに示しています。

明らかでないことがあれば、私は何か質問に答えるか、または何かを詳しく説明することができます。

UPDATE:接続文字列 - プライベートデータの投稿から自分自身を守るため、検索を行い、接続名を見つけてdb1とdb2に置き換え、サーバー名をmyServerに置き換えました。 名前がすべての出現に正確に入力され、サーバー名が正しいことを確認しました。その2つの問題は問題にならないでしょう。次のように

<connectionStrings> 
    <add name="db1Entities" connectionString="metadata=res://*/Models.db1.csdl|res://*/Models.db1.ssdl|res://*/Models.db1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer;initial catalog=db1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    <add name="db2Entities" connectionString="metadata=res://*/Models.db2.csdl|res://*/Models.db2.ssdl|res://*/Models.db2.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer;initial catalog=db2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

我々は...私達のエンティティクラスのメタデータ型の部分クラスを使用します。

namespace project.Models 
{ 
    public class PartialClasses 
    { 
    } 

    [MetadataType(typeof(object1Metadata))] 
    public partial class object1 
    { } 

    [MetadataType(typeof(object2Metadata))] 
    public partial class object2 
    { } 

} 
+0

このエラーは、接続文字列が不良である可能性が高いためです。接続文字列を投稿できますか? –

+0

@NagarajRaveendranが要求したconnectionStringsを含めるように質問を更新しました – kwebb46

+0

接続文字列が見栄えします! –

答えて

0

あなたは、スキーマのいずれかを追加または変更しましたか?その場合は、最も簡単な方法は、両方のEDMXを削除して再度作成することです。

+0

はほとんど一番簡単ではなく、問題を解決しない可能性があります。なぜなら、彼が再びそれらを作成すると、彼は同じ問題にぶつかるからです。 EDMXファイルには、多くの場合、再作成が必要なカスタマイズが含まれています。 –

関連する問題