C# C MVC3连接SDF数据表

C# C MVC3连接SDF数据表,c#,database,asp.net-mvc-3,razor,C#,Database,Asp.net Mvc 3,Razor,我已经创建了一个MVC3Razor应用程序来管理项目,并且应该管理这些项目中的各个部分 所以,我制作了一个模型Projects.cs,controller Projects controller,并为自己准备了一个Projects.sdf数据表。很好用 然后我为节添加了相同的内容,但是节应该有一个名为projectID的字段,当然,它与Projects.sdf中的ID连接;另外,我需要它能够按照projectd进行排序,并从下拉列表中进行排序 例如:使用下拉菜单更改表数据。如果让我们假设我从项目

我已经创建了一个MVC3Razor应用程序来管理项目,并且应该管理这些项目中的各个部分

所以,我制作了一个模型Projects.cs,controller Projects controller,并为自己准备了一个Projects.sdf数据表。很好用

然后我为节添加了相同的内容,但是节应该有一个名为projectID的字段,当然,它与Projects.sdf中的ID连接;另外,我需要它能够按照projectd进行排序,并从下拉列表中进行排序

例如:使用下拉菜单更改表数据。如果让我们假设我从项目列表中选择了project1,我希望列表显示该项目中的所有部分以及CRUD

我已经尝试了一些方法,但到目前为止都没有成功,我知道如何在常规应用程序中做到这一点,但在MVC中不行,所以我请求一些帮助。还尝试在Sections视图中添加下拉列表,并从项目模型数据填充它,但毫无用处

因此,我需要有关如何做到这一点的帮助:

请,谢谢

加成


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

至于数据上下文 这是一个项目

增补2

所以我制作了一个名为MyProjectModels.cs的模型

所以基本上我是在想办法。请让我知道这对模型是否合适,或者我是否需要将它们放在单独的文件中?另外,我应该如何声明上下文从这一点来说,一个提示就足够了:

多谢各位

我就是这样做的。它显示正确,但我不知道如何利用它,例如,在表中显示不同的值

<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>

表中的不同值是指,在本例中选择不同的注册时。我想在表中显示不同的值。

您真的需要不同的DBContext吗?如果它是一个sdf文件,那么我猜不是,您的dbcontext应该是这样的

namespace MyProject.Models
{
    public class DatabaseContext: DbContext 
    {
         public DbSet<Projects> Projects { get; set; } 
         public DbSet<Sections> Sections{ 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外键。然后,您的项目模型将有权访问截面对象。我在EF方面遇到的最大障碍是过度考虑数据库方面的事情

对于下拉列表,这里是我的操作方式

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循环。这完全取决于在你的情况下什么最有效

你在用EF吗?如果是,您的数据上下文是什么样子的?如果没有,您是否有一个sections对象,它是否有项目的属性。项目是否有许多部分或部分有许多项目项目有许多部分,是的,我正在使用EF,但正如我所说的,没有太多的经验。添加将无法正确显示代码。。。也许只是我不知道如何正确的定位。。。但所有这些都是以块的形式显示代码,只需在每行开头加上4个或更多的空格,并在文本和代码之间留下空行。好的。。。我想我明白了大部分。。。所以基本上我不需要两个模型,但是一个。。。现在那部分我真的不明白了。。。我了解数据库一般,但这整个环境足迹是相当陌生的我。。。如果您不介意在制作这些文件时更详细地解释一下我需要的文件结构:好的,我编辑了我的答案,试图让它更清楚一点。基本上,可以将dbcontext类视为数据库模式,将dbset项视为表。您的模型与数据库无关,而是定义与数据库对话的对象。因此,您仍然需要一个项目和一个分区模型。dbset将读取这些模型对象以确定如何构造表。通过让项目模型包含Section类型的属性,现在您的dbcontext实际上在项目表中具有Section id的外键,并且您的项目模型可以通过点表示法访问所有这些Section属性,即project.Section.Name、project.Section.Description等。我想我现在明白了。如果我卡住了,我可能会再麻烦你一点:非常感谢你。我会善意地要求版主暂时不讨论这个问题:没问题。如果问题是建设性的,并且在op方面表现出一些努力,那么问题就不会结束。
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; }
    }
}
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 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;
    }
}
@model ChangeUserNameViewModel
@Html.DropDownList("UserName", Model.Users, "Choose")