MVC将数据层转换为dbcontext

时间:2014-06-23 23:08:00

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

我的解决方案有以下项目:

  • Logan.Web.DBContext 这是表格的DbContext与关系等一起定义的地方
  • Logan.Web.DBObjects 这是为表定义类的位置。这些包含将在应用程序中使用的属性
  • Logan.Web.Data 这是MVC应用程序用来与上述进行交互的数据层
  • LoganMVC 实际的MVC网站

我从涉及用户记录的CRUD操作的逻辑开始,所以我已经编码了以下内容:

数据库上下文

namespace Logan.Web.DBContext
{
    public class UserDBContext : LoganDBBaseObject<User>
    {
        private static WebDBContext db = new WebDBContext();

        public UserDBContext()
            : base()
        {
            Property(p => p.Username)
                .HasColumnName("sUsername")
                .HasMaxLength(20)
                .IsRequired();

            Property(p => p.EmailAddress)
                .HasColumnName("sEmailAddress")
                .HasMaxLength(200)
                .IsRequired();

            Property(p => p.Password)
                .HasColumnName("sPassword")
                .HasMaxLength(255)
                .IsRequired();

            Property(p => p.Biography)
                .HasColumnName("sBiography")
                .HasColumnType("text");

            HasRequired(r => r.Role)
                .WithMany(m => m.Users)
                .Map(x => x.MapKey("fkRoleID"))
                .WillCascadeOnDelete(false);

            ToTable("Users");

        }
    }
}

课程定义

namespace Logan.Web.Objects
{
    public class User : LoganBaseObject<User>
    {
        public string Username { get; set; }
        public string EmailAddress { get; set; }
        public string Password { get; set; }
        public string Biography { get; set; }
        public virtual Role Role { get; set; }


        public virtual ICollection<Article> Articles { get; set; }

        public User()
        {
            Username = String.Empty;
            EmailAddress = String.Empty;
            Password = String.Empty;
            Biography = String.Empty;
            Articles = new List<Article>();
        }
    }
}

CRUD功能

namespace Logan.Web.Data
{
    public class WebUser
    {
        WebDBContext db = new WebDBContext();

        public List<User> GetUsers()
        {
            return db.Users.Include(x => x.Role).ToList();
        }
}

我在尝试将此代码绑定到MVC时遇到了麻烦。我知道我可能会在模型中做到这一点,但是我不知道这是什么告诉View什么以及如何告诉数据库当我想操纵数据时View所说的内容。

我到目前为止所做的就是:

    // controller
    public ActionResult Index()
    {
        UserModel u = new UserModel();
        var users = u.GetUsers();

        return View(users);
    }

    // model
    public List<User> GetUsers()
    {
        WebUser u = new WebUser();
        return u.GetUsers();
    }

如何使用此结构创建写入/更新/删除功能或通过主键获取记录?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您需要更改WebUser类以包含这些操作的方法。

你需要:

public User GetUser(string userName)

public User CreateUser(User user)

public User UpdateUser(User user)

public bool DeleteUser(string userName)

尽管如此,您可能会在命名类User时遇到问题,因为它是由MVC框架保留的。