为什么在VS 2012中使用Code First时,Entity Framework 4会生成额外的列?

时间:2012-09-05 04:24:15

标签: visual-studio entity-framework visual-studio-2012

我刚安装了VS 2012 Premium,我一直在关注PluralSight ASP.Net MVC 4教程。我在第4章,该项目使用EF 4 Code First自动创建数据库。

奇怪的是,它创建了额外的数据库列,而不是匹配我的Restaurant.cs模型文件中的属性。

在Restaurant.cs我有:

namespace OdeToFood.Models
{
    public class Restaurant
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public Address Address { get; set; }
    }
}

但是,在OdeToFoodDB dbo.Restaurants表中它会生成:

  • ID(PK,int,not null)
  • 名称(nvarchar(max),null)
  • Address_Street(nvarchar(max),null)
  • Address_City(nvarchar(max),null)
  • Address_State(nvarchar(max),null)
  • Address_Country(nvarchar(max),null)

但课程中没有Street,City,State和Country属性。在视频中,数据库只有ID,Name和Address列,但我不知道这是否与他在处于预发布状态时使用EF的事实有关。新EF有一些很大的假设吗?

有没有人知道这里发生了什么?

我已经删除了生成的数据库,obj和bin中的文件,重新创建了一个Restaurant.cs类,卸载了EF4,并添加了EF5,但没有改变最终结果。我仍然得到那些与我的Restaurant.cs文件无关的额外列。

1 个答案:

答案 0 :(得分:2)

你看到的是设计。 Address是复杂类型,这就是复杂类型在数据库表中的表示方式。

请查看here以获取有关此示例的说明。