【问题标题】:ASP.Net MVC with Entity Framework Code First Navigation Property具有实体框架代码优先导航属性的 ASP.Net MVC
【发布时间】:2013-03-31 22:53:07
【问题描述】:

我有一个名为 Service 的实体,如下所示:

public class Service
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int serviceId { get; set; }
    public string name { get; set; }
    public string description { get; set; }

    public ServiceCategory category { get; set; }
}

类别由用户通过下拉列表选择,该下拉列表包含 db 中可用类别的 ID 和名称。然后 ViewModel 会将该 ID 返回给我以保存。到目前为止,我一直这样做的方式是转到我的存储库,获取 id 与视图中所选类别匹配的类别对象,然后分配它。这当然需要往返于数据库。

我想知道,既然我已经有了 id,有没有更好的方法在我不去数据库的情况下做到这一点?

【问题讨论】:

    标签: c# asp.net-mvc-3 asp.net-mvc-4 ef-code-first navigation-properties


    【解决方案1】:

    修改你的代码

    public class Service
    {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int serviceId { get; set; }
    public int ServiceCategoryId {get; set;}  // Added
    public string name { get; set; }
    public string description { get; set; }
    
    public ServiceCategory ServiceCategory { get; set; }
    }
    

    并填写ServiceCategoryId

    【讨论】:

    • 这样,它会自动将ServiceCategoryId映射到ServiceCategory?
    • @hjavaher EF 将从 serviceid 加载关联的 ServiceCategories,ServiceCategoryId 将允许您访问子表中的基础键。还有一个缓存选项,将结果保存在内存中以便更快地访问,而无需访问数据库
    • 好的,我想我们有一点沟通不畅。上面的类是我的模型,我正在使用一个 viewModel,它发回我选择的 servicecategoryid。当我向数据库添加新服务时,通常我会去数据库,找到受尊重的类别,将其加载到内存中并将其分配给服务。我在问,因为我已经有了 id,并且在 db 中唯一保存的是 id 作为 FK 我可以为自己保存 db 往返以加载类别吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多