保存DbContext不会将数据保存到数据库

时间:2017-03-30 22:31:04

标签: .net entity-framework-6

为授权用户自动创建数据库。我更新我的数据库我的本地表。有一些表像Klient,Ulica,Address。描述此表的模型:

public partial class Klient
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Klient()
    {
        this.Abonements = new HashSet<Abonement>();
    }

    public int ID_klient { get; set; }
    public string FIO_klient { get; set; }
    public string Telephon { get; set; }
    public Nullable<int> ID_adress { get; set; }
    public string ID_Login { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Abonement> Abonements { get; set; }
    public virtual Adress Adress { get; set; }
}
public partial class Ulica
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Ulica()
    {
        this.Adresses = new HashSet<Adress>();
    }

    public int ID_ulica { get; set; }
    public string Nazvanie_ulicu { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Adress> Adresses { get; set; }
}
public partial class Adress
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Adress()
    {
        this.Klients = new HashSet<Klient>();
        this.Sotrudniks = new HashSet<Sotrudnik>();
    }

    public int ID_adress { get; set; }
    public Nullable<int> Nomer_doma { get; set; }
    public Nullable<int> Nomer_kvartiru { get; set; }
    public Nullable<int> ID_ulica { get; set; }

    public virtual Ulica Ulica { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Klient> Klients { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Sotrudnik> Sotrudniks { get; set; }
}

此模型的DbContext是:

public partial class Entities : DbContext
{
    public Entities()
        : base("name=Entities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Adress> Adresses { get; set; }
    public virtual DbSet<Klient> Klients { get; set; }
    public virtual DbSet<Ulica> Ulicas { get; set; }
    // and others models of my database
}

当我尝试更改标准AccountController并将一些数据添加到Register方法的Klient模型时,我将此代码添加到Register方法:

public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
              // some code
              var ulica = new Ulica() { Nazvanie_ulicu = model.Ulica };
                FitnesManager.Ulicas.Add(ulica);
                var adress = new Adress { Ulica = ulica, ID_ulica = ulica.ID_ulica, Nomer_doma = model.Nomer_doma, Nomer_kvartiru = model.Nomer_kvartiru};
                FitnesManager.Adresses.Add(adress);
                var klient = new Klient { FIO_klient = model.FIO, Telephon = model.Telephon, Adress = adress, ID_adress = adress.ID_adress, ID_Login = user.Id };
                var res = FitnesManager.Klients.Add(klient);
                await FitnesManager.SaveChangesAsync();
        }

        // Появление этого сообщения означает наличие ошибки; повторное отображение формы
        return View(model);
    }

FitnesManager是AccountController的DbContext值

public Entities FitnesManager
    {
        get
        {
            return _fitnesManager ?? new Entities();
        }
        private set
        {
            _fitnesManager = value;
        }
    }

但是当我调用Register方法时,任何数据都不会添加到数据库中。我该如何解决?

1 个答案:

答案 0 :(得分:1)

这一行错了:

return _fitnesManager ?? new Entities();

您每次都会返回一个新实例。我想你会选择这种风格:

return _fitnesManager ?? (_fitnesManager = new Entities());

或者只是这样做:

if (_fitnesManager == null)
   _fitnesManager = new Entities();
return _fitnesManager;
相关问题