Свойство сущности равно нулю даже при использовании значения сущности - PullRequest
3 голосов
/ 14 марта 2019

Так что по какой-то причине, когда я пытаюсь сделать 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 по какой-то причине, и я никогда не давал ему никаких значений по умолчанию в базе данных.

1 Ответ

2 голосов
/ 15 марта 2019

Проблема заключалась в том, что имя пользователя было установлено как вычисленное на модели в StoreGeneratedPattern. Убедитесь, что для него задано значение none, чтобы не выдавать пустое исключение при вставке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...