Правильное использование сущностей .Net в MVC3 - PullRequest
2 голосов
/ 16 декабря 2011

Я следую этой статье: http://msdn.microsoft.com/en-us/data/gg685467

У меня есть моя UserModel:

using System;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace Website.Models
{
    public class UserContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    }

    public class UserModel
    {
        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }

        public DateTime DateCreated { get; set; }
    }
}

Однако, когда я бегу:

            using (UserContext db = new UserContext())
            {
                db.Users.Add(user);
                db.SaveChanges();
            }

Я получаю сообщение об ошибке. Объект не сопоставлен ...

Может кто-нибудь сказать мне, что я делаю не так? Я попытался использовать другой метод добавления модели данных объекта, но он не использовал бы мое основное соединение. Пожалуйста, что я делаю не так?

EDIT: Теперь в базу данных ничего не входит, но я не получаю ошибки, вот что я делаю:

    User user = new UserModel();
    user.FirstName = "Please";
    user.LastName = "Work";
    user.DateCreated = DateTime.Now;
    user.AspNetUserId = new Guid();

    using (var userContext = new UserContext())
    {
        userContext.Users.Add(user);
        userContext.SaveChanges();
    }

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Вы должны сообщить своему контексту State нового объекта. Пожалуйста, исправьте меня, если я ошибаюсь, но состояние по умолчанию, когда вы выполняете .Add(), равно EntityState.Unchanged, поэтому контекст ничего не сохраняет, потому что для него нечего сохранять.

using (var userContext = new UserContext()) 
    { 
        userContext.Users.Add(user);
        userContext.entry(user).State = EntityState.Added; 
        userContext.SaveChanges(); 
    } 

Вот пример приложения, над которым я работаю, когда мы говорим, что компилирует / запускает / сохраняет в БД

       dr405.Transmitted = true;
        dr405.ModDate = DateTime.Now;
        db.dr405s.Add(dr405);
        db.Entry(dr405).State = EntityState.Modified; 
        service.Save(db);
0 голосов
/ 16 декабря 2011

Поскольку у вас есть только User тип DbSet в вашем контексте, и вы пытаетесь сохранить объект типа UserModel. Измените объявление DbSet на DbSet<UserModel>.

public class UserContext : DbContext
{
    public DbSet<UserModel> Users { get; set; }
}
...