同様の質問
エンティティタイプ<classname>は現在のコンテキストのモデルの一部ではありません-そして-EF4.1コードファーストエラー-エンティティタイプSomeTypeは現在のコンテキストのモデルの一部ではありません同様の質問ですが、「コードファースト」の観点ですのみ、はるかに単純なデータモデルを使用し、接続文字列とマッピングの問題に対処します。これをよく見てください。
症状
// HomeController.cs
public ActionResult Index()
{
var _db = new MealsContext();
var m = _db.Meals.ToList();
var d = _db.Drinks.ToList();
return View();
}
Drinksコレクションを取得すると例外がスローされます。
The entity type Drink is not part of the model for the current context.
コード
// Meal.cs
public class Meal
{
public int Id { get; set; }
public string Stuff { get; set; }
public virtual ICollection<Meat> Meats { get; set; }
public virtual ICollection<Vegetable> Vegetables { get; set; }
}
// Meat.cs
public class Meat
{
public int Id { get; set; }
public string Name { get; set; }
public int MealId { get; set; }
}
// Vegetable.cs
public class Vegetable
{
public int Id { get; set; }
public string Name { get; set; }
public int MealId { get; set; }
}
// Drink.cs
public class Drink
{
public int Id { get; set; }
public string Name { get; set; }
}
はい、私は現実の世界では、肉と野菜と食事の関係は多対多である可能性が高いことを知っていますが、ここでそれにこだわる必要はありません。
// MealsContext.cs
public class MealsContext: DbContext
{
public MealsContext() : base("ConnectionString")
public DbSet<Meal> Meals{ get; set; }
public DbSet<Meat> Meats{ get; set; }
public DbSet<Vegetable> Vegetables { get; set; }
public DbSet<Drink> Drinks{ get; set; }
}
私の経験は、モデルファーストの方法論を使用したことです。EDMXファイルが作成されてからPOCOが作成されました。
接続文字列には、解析されたEDMXリソースにマップするメタデータセクションがあります(metadata=res://*/Models.MealsModels.csdl|res://*/Models.MealsModels.ssdl|res://*/Models.MealsModels.msl;)。
EDMXファイルの基礎となるXMLを調べたところ、ConceptualモデルとStoreモデルに存在するすべてのエンティティが示され、すべてが完全にマップされています。WTF?
トラブルシューティング
SSDL最初に試みたのは、ストアとマッピングEDMXデータ(およびMSLセクション)を完全に取り除くことでした。発射してください、そして今、2つの例外があります:
Mealsスローを取得してMSL, error 2062 No mapping specified for instance of the EntitySet and AssociationSet in the EntityContainerいます。取得
Drinksはスローを続けThe entity type Drinkis not part of the model for the current contextます。
によってスローされるエラーMealsが予想されます。マッピングとストアモデルを削除しました。調べてみると、_db- Meals> InternalSet->EntitySetプロパティが正しく、マッピングされていないことがわかります。
によってスローされたエラーDrinksは、私が立ち往生しているところです。よく調べる_dbと、Drinks-> InternalSet->は、エンティティがモデルコンテキストにないことを示す例外をEntitySetスローすることがわかります。SystemInvalidOperation
EDMXのCSDLはXML形式で次のようになります。
<edmx:ConceptualModels>
<Schema ...>
<EntityContainer Name="MealsContext" annotation:LazyLoadingEnabled="true">
<EntitySet Name="Meals" EntityType="Models.Meal" />
<EntitySet Name="Meats" EntityType="Models.Meat" />
<EntitySet Name="Vegetables" EntityType="Models.Vegetable" />
<EntitySet Name="Drinks" EntityType="Models.Drink" />
<!-- AssociationSets here for the FKs -->
</EntityContainer>
<!-- All are present, but here's the culprit Drink -->
<EntityType Name="Drink">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Type="String" Name="Name" Nullable="false" MaxLength="200" FixedLength="false" Unicode="true" />
</EntityType>
<!-- Associations here -->
</Schema>
</edmx:ConceptualModels>
質問
DbContextにすべてのプロパティがあり、DbSetCSDLがエンティティタイプを正しく定義しているモデルのメタデータを含む接続文字列を使用している場合、なぜそれがコンテキストの一部ではないのですか?Drink
私が見ることができる唯一の違いDrinkは、それが他のエンティティとは関係がなく、関連付けがないことです...