System.InvalidOperationException: The type MyContext+Northwind was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject.
错误原因:
entity framework不能将内部类与数据库匹配。
错误代码如下所示:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data.Entity;
6 using System.ComponentModel.DataAnnotations;
7
8 namespace TestCodeFirst
9 {
10 public class MyContext
11 {
12 public class Product
13 {
14 public int ProductID { get; set; }
15 public int CategoryID { get; set; }
16 [Required(ErrorMessage = "Product Name不能为空")]
17 public string ProductName { get; set; }
18 public Decimal? UnitPrice { get; set; }
19 public bool Discontinued { get; set; }
20 public virtual Category Category { get; set; }
21 }
22
23 public class Category
24 {
25 public int CategoryID { get; set; }
26 public string CategoryName { get; set; }
27 public string Description { get; set; }
28 public byte[] Picture { get; set; }
29 public virtual ICollection<Product> Product { get; set; }
30 }
31 public class Northwind : DbContext
32 {
33 public DbSet<Product> Products { get; set; }
34 public DbSet<Category> Categorys { get; set; }
35 }
36 }
37 }
解决的办法:Northwind作为内部类。正确的代码如下所示
1 namespace TestCodeFirst
2 {
3 public class Product
4 {
5 public int ProductID { get; set; }
6 public int CategoryID { get; set; }
7 [Required(ErrorMessage="Product Name不能为空")]
8 public string ProductName { get; set; }
9 public Decimal? UnitPrice { get; set; }
10 public bool Discontinued { get; set; }
11 public virtual Category Category { get; set; }
12 }
13
14 public class Category
15 {
16 public int CategoryID { get; set; }
17 public string CategoryName { get; set; }
18 public string Description { get; set; }
19 public byte[] Picture { get; set; }
20 public virtual ICollection<Product> Product { get; set; }
21 }
22 public class Northwind:DbContext
23 {
24 public DbSet<Product> Products { get; set; }
25 public DbSet<Category> Categorys { get; set; }
26 }
27 }