gpt4 book ai didi

asp.net-mvc-3 - 为什么 MVC3 没有为我的外键列搭建脚手架

转载 作者:行者123 更新时间:2023-12-04 00:09:44 24 4
gpt4 key购买 nike

我正在尝试首先使用代码将 MVC 3 与 EF 4.1 一起使用,并且正在关注 Scott Guthries 教程 http://weblogs.asp.net/scottgu/archive/2011/05/05/ef-code-first-and-data-scaffolding-with-the-asp-net-mvc-3-tools-update.aspx .

我遇到的问题是,当我创建产品 Controller 和相关的脚手架 View 时,在任何 View (“编辑”、“创建”、“索引”等)中都没有创建“类别”列),根据教程应该创建它。

我已经追踪到该列未显示的原因是因为 t4 模板...它未能检查它是否是可绑定(bind)类型以便将属性显示为列。

判断是否可绑定(bind)的逻辑是:

bool IsBindableType(Type type) {
return type.IsPrimitive || bindableNonPrimitiveTypes.Contains(type);
}

其中 bindableNonPrimitiveTypes 是一个固定列表:

static Type[] bindableNonPrimitiveTypes = new[] {
typeof(string),
typeof(decimal),
typeof(Guid),
typeof(DateTime),
typeof(DateTimeOffset),
typeof(TimeSpan),
};

我刚刚安装了 VS2010 sp1、EF 4.1 和教程引用的 MVC3 工具更新。我确定我已经完成了所有步骤...

我哪里出错了/我错过了什么?

最佳答案

我相信它确实按照教程中的描述工作 - 我现在刚刚完成了该教程并得到了预期的结果(它确实搭建了一个“类别”列和下拉列表)。

我对为什么它在您的情况下不起作用的最佳猜测是,您可能错过了 Product 类中的 CategoryID 属性,或者您将其称为其他名称.对于检测 FK 关系的脚手架,您的实体必须同时具有“导航”属性(在本例中为 Category,类型为 Category)和“外部key”属性(在本例中为 int 类型的 CategoryID) - 没有这些,它不会推断关系,因此您不会得到下拉列表。

如果有帮助,这里是模型类的完整代码,您可以将其复制并粘贴到您的项目中:

public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public int CategoryID { get; set; }
public decimal? UnitPrice { get; set; }
public int UnitsInStock { get; set; }

public virtual Category Category { get; set; }
}

public class Category
{
public int CategoryID { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}

public class StoreContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}

记得在使用“添加 Controller ”窗口之前编译你的代码,否则它不会意识到你已经改变了代码。

关于asp.net-mvc-3 - 为什么 MVC3 没有为我的外键列搭建脚手架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6319802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com