Так что по какой-то причине, когда я пытаюсь сделать db.SaveChanges
, он говорит, что свойству Имя пользователя не разрешено вставлять нулевое значение, но оно не равно нулю, когда я использую отладчик. Свойство Имя пользователя элемента содержит строку ...
public void fvAddUser_InsertItem()
{
var item = new InventarioCiclico.xUtilizador();
TryUpdateModel(item);
if (ModelState.IsValid)
{
using (InventarioCiclicoContext db = new InventarioCiclicoContext())
{
if (db.xUtilizador.Any(u => u.Username == item.Username))
{
Page.ClientScript
.RegisterStartupScript(
this.GetType(),
"ShowToast",
"ShowToast('Erro','topCenter','error', 'Utilizador já exsiste.', '2000')",
true
);
}
else
{
xColaborador c = new xColaborador();
c.Nome = (fvAddUser.FindControl("txtNome") as TextBox).Text;
c.Email = (fvAddUser.FindControl("txtEmail") as TextBox).Text;
item.xColaborador.Add(c);
db.xUtilizador.Add(item);
db.SaveChanges();
Page.ClientScript
.RegisterStartupScript(
this.GetType(),
"ShowToast",
"ShowToast('OK', 'topCenter','success', 'Utilizador adicionado com sucesso.', '2000')",
true
);
}
}
}
}
Сначала я использую базу данных, это класс xUtilizador
public partial class xUtilizador
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public xUtilizador()
{
this.Activo = true;
this.xAcesso = new HashSet<xAcesso>();
this.xColaborador = new HashSet<xColaborador>();
}
public int UserID { get; set; }
public string Username { get; set; }
public bool Activo { get; set; }
public Nullable<System.DateTime> UltimoAcesso { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<xAcesso> xAcesso { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<xColaborador> xColaborador { get; set; }
}
EDIT
Мне также пришлось создать частичные классы и классы метаданных для обновления значения по умолчанию в базе данных
[MetadataType(typeof(Metadata.UtilizadorMetadata))]
public partial class xUtilizador
{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public bool Activo { get; set; }
}
public class UtilizadorMetadata
{
[StringLength(8)]
[Display(Name="Username")]
public string Username;
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public bool Active;
}
EDIT
Также я только что заметил, что для имени пользователя StoreGeneratedPattern установлено значение Computed по какой-то причине, и я никогда не давал ему никаких значений по умолчанию в базе данных.