0

我创建了一个模型

public class Moo
{
    public Int32 MooId { get; set; }
    public string Description { get; set; }
    public City CityIdFrom { get; set; }
    public Int32 Weight { get; set; }
}

public class City
{
    public Int32 CityId { get; set; }
    public string Name { get; set; }
}

我写了

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        System.Data.Entity.Database.SetInitializer(
             new System.Data.Entity.DropCreateDatabaseAlways<DbConnection>());
        ...

在 Global.asax.cs

简而言之 - 我按照这里的教程进行操作。

但是,我得到了一个使用以下列创建的数据库表 Moo:

   [MooId]
  ,[Description]
  ,[Weight]
  ,[CityIdFrom_CityId]

但是,就像在教程中一样,我希望这看起来像:

   [MooId]
  ,[Description]
  ,[Weight]
  ,[CityIdFrom]

生成器添加不必要的 _CityId 的原因是什么?(对于所有具有关系的表的列也是如此)我很确定必须有一个设置,但我发现很难说出我的问题。

4

2 回答 2

1

您没有在Moo模型中明确声明 FK 列。

CityIdFrom属性是类型的导航属性City,而不是类型的 FK 列Int32

因此,您在数据库中看到的列是由 EF 自动为您创建的。

如果要命名此列,则必须将其添加到模型中:

public class Moo
{
  public Int32 MooId { get; set; }
  public string Description { get; set; }

  public Int32 CityFromId { get; set; }
  public City CityFrom { get; set; }

  public Int32 Weight { get; set; }
}

注意:列名是约定俗成的,所以 EF 可以弄清楚什么是什么。 导航属性的数据库 FK 列也是
如此,因为它与末尾的名称相同。CityFromIdCityFromId

于 2012-11-26T22:23:00.163 回答
0

它正在创建一个外键City.CityId,因此额外的_CityId. 您需要添加该属性[Column("CityIdFrom")]以告诉框架您希望它使用其默认值以外的其他内容。

于 2012-11-26T19:24:49.460 回答