为授权用户自动创建数据库。我更新我的数据库我的本地表。有一些表像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方法时,任何数据都不会添加到数据库中。我该如何解决?
答案 0 :(得分:1)
这一行错了:
return _fitnesManager ?? new Entities();
您每次都会返回一个新实例。我想你会选择这种风格:
return _fitnesManager ?? (_fitnesManager = new Entities());
或者只是这样做:
if (_fitnesManager == null)
_fitnesManager = new Entities();
return _fitnesManager;