实体框架代码第一种方法

时间:2016-02-07 20:37:43

标签: c# entity-framework

  public class ContextEx:DbContext 
    {
        public void modelcreate(DbModelBuilder modelbuilder)
        {
            Database.SetInitializer<ContextEx>(null);
            modelbuilder.Entity<Category>().ToTable("Categories");
            modelbuilder.Entity<Category>().HasKey(c=> new {c.CategoryID});

            modelbuilder.Entity<CartItem>().ToTable("CartItems");
            modelbuilder.Entity<CartItem>().HasKey(ci=> new {ci.CartId});

            modelbuilder.Entity<Product>().ToTable("Products");
            modelbuilder.Entity<Product>().HasKey(p=> new {p.ProductID});

            modelbuilder.Entity<Order>().ToTable("Orders");
            modelbuilder.Entity<Order>().HasKey(en=> new { en.OrderId});

            modelbuilder.Entity<OrderDetail>().ToTable("OrderDetails");
            modelbuilder.Entity<OrderDetail>().HasKey(od=> new {od.OrderDetailId });
        }

        public DbSet<Category> Categoriesdb { get; set; }
        public DbSet<Product> Products { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<OrderDetail> Details { get; set; }
        public DbSet<CartItem> Items { get; set; }

    }

/********************Second Class*****************************/
namespace wing.tip.toys.dal.model
{
    public class Second
    {
        public static void Main(string[] args)
        {
            try
            {
                ContextEx cont = new ContextEx();
                List<Category> Category = cont.Categoriesdb.ToList<Category>();
            }
            catch (Exception e)
            {
               Console.WriteLine(e.Message.ToString());
            }
        }
    }
}

此处在Line - List Category = cont.Categoriesdb.ToList(); 它给我带来了以下例外:

在模型生成期间检测到一个或多个验证错误:

\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType&#39; CartItem&#39;没有定义键。定义此EntityType的键。 \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet&#39; Items&#39;是基于类型&#39; CartItem&#39;没有定义键。

我很困惑该怎么做。我到处搜索但没有得到理想的解决方案。请帮我。

1 个答案:

答案 0 :(得分:2)

您的代码可能存在的一个问题是,而不是

protected override void OnModelCreating( DbModelBuilder modelbuilder )

你有

public void modelcreate(DbModelBuilder modelbuilder)

因此永远不会调用元数据设置方法。