C#MVC3加入SDF数据表

时间:2012-05-25 13:47:42

标签: c# database asp.net-mvc-3 razor

我创建了一个管理项目的MVC 3 Razor应用程序,并且应该在Sections内管理Projects

所以,我创建了一个模型Projects.cs,控制器ProjectsController,并获得了一个Projects.sdf数据表。工作得很好

然后我为Sections添加了相同内容,但是Sections应该有一个名为projectID的字段(当然是这样做的)与ID连接(加入)在Projects.sdf;另外,我需要它能够按projectIDDropDown

排序

例如:使用DropDown更改表数据。如果我说从项目列表中选择 project1 ,我希望列表显示Sections中的所有Project以及CRUD。

我已经尝试了几件但到目前为止没有工作,我知道如何在常规应用程序中执行此操作但不在MVC中执行此操作,因此我请求一些帮助。还尝试在DropDown视图中添加Sections并让其填充Project模型数据,但一点也不好。

所以我需要帮助来解决这个问题:(

拜托,谢谢。

加成

项目有很多部分,是的,我使用的是EF,但正如我所说,对它没有太多经验。

至于数据上下文 这是Project

namespace MyProject.Models
{
    public class Projects
    {
        public int ID { get; set; }
        public string projectName { get; set; }
        public string shortDesc { get; set; }
    }

    public class ProjectsDBContext : DbContext 
    {
        public DbSet<Projects> Projects { get; set; }        
    }
}

这是Section

namespace MyProject.Models
{
    public class Sections
    {
        public int ID { get; set; }
        public int projectID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }

    public class SectionsDBContext : DbContext 
    {
        public DbSet<Sections> Sections { get; set; }
    }
}

添加2

所以我创建了一个名为MyProjectModels.cs

的模型
namespace MyProject.Models 
{
    public class Project
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }

    public class Section
    {
        public int ID { get; set; }
        public int projectID { {get; set;}
        public string Name { get; set; }
        public string Description { get; set;}
    }
}

所以基本上我有点想通了。请告诉我这是否适用于型号,还是需要将它们放在单独的文件中?另外,我应该如何从这一点声明上下文,提示就足够了:)

谢谢


这就是我做的方式。它显示正常,但我不知道如何利用它,例如在表格中显示不同的值...

<select id="select1" name="select1">
        @foreach (var item in Model.Enrollments)
        {
        <option value=@Html.DisplayFor(modelItem => item.Course.Title)>@Html.DisplayFor(modelItem => item.Course.Title)</option>
        }
</select>

表中的不同值我的意思是,当我在这种情况下选择不同的注册时。我想在表格中显示不同的值。

2 个答案:

答案 0 :(得分:2)

你真的需要有不同的dbcontexts吗?如果它是一个sdf文件,那么我猜不是,你的dbcontext应该看起来像

namespace MyProject.Models
{
    public class DatabaseContext: DbContext 
    {
         public DbSet<Projects> Projects { get; set; } 
         public DbSet<Sections> Sections{ get; set; }         
    }
}

然后在您的项目模型中,您将拥有部分属性

namespace MyProject.Models
{
    public class Projects
    {
        public int ID { get; set; }
        public string projectName { get; set; }
        public string shortDesc { get; set; }
        public Sections section { get; set; }
    }
}

您的部分只需要一个id字段

namespace MyProject.Models
{
    public class Sections
    {
        public int ID { get; set; }
        public int projectID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
}

只要您的sections类具有一个名为ID的主键字段或标记为主键的id属性,那么EF将实现Projects在表结构中具有section的外键的逻辑跳跃。然后,您的项目模型将可以访问section对象。我对EF的最大障碍是过度思考数据库方面的问题。

答案 1 :(得分:0)

对于下拉列表,这是我做的方式

public class ChangeUserNameViewModel
{
    public ChangeUserNameViewModel()
    {
        var user = User.GetAllButBuiltIn();
        Users = new SelectList(user, "UserName", "UserName");
    }

    public User User
    {
        get;
        set;
    }

    [DisplayName("User Name")]
    public SelectList Users
    {
        get;
        set;
    }


    public string UserName
    {
        get;
        set;
    }
}

然后在视图中我引用了viewmodel

@model ChangeUserNameViewModel
@Html.DropDownList("UserName", Model.Users, "Choose")

第一个参数是html中下拉列表的名称。第二个选择列表填充它,第三个选择值。我确信有更好的方法可以做到这一点。例如,您可以在模型中使用IList,然后在视图中执行foreach循环。这一切都取决于你的情况下最有效的方法。