私は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="data source=myServer;initial catalog=db1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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="data source=myServer;initial catalog=db2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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
{ }
}
このエラーは、接続文字列が不良である可能性が高いためです。接続文字列を投稿できますか? –
@NagarajRaveendranが要求したconnectionStringsを含めるように質問を更新しました – kwebb46
接続文字列が見栄えします! –