Walidacja nie powiodła się dla jednego lub więcej podmiotów. Zobacz właściwość 'EntityValidationErrors' po więcej szczegółów [duplikat]
Mam ten błąd podczas pozycjonowania mojej bazy danych z kodem pierwszego podejścia.
Walidacja nie powiodła się dla jednego lub więcej podmiotów. Zobacz właściwość 'EntityValidationErrors', aby uzyskać więcej informacji.
Szczerze mówiąc Nie wiem jak sprawdzić zawartość błędów walidacji. Visual Studio pokazuje mi, że jest to tablica z 8 obiektami, więc 8 błędów walidacji.
To działało z moim poprzednim modelem, ale Zrobiłem kilka zmian, które wyjaśniam poniżej:
- miałem enum o nazwie Status, zmieniłem go na klasę o nazwie Status
- zmieniłem klasę ApplicantsPositionHistory, aby mieć 2 klucze obce do tej samej tabeli
Przepraszam za długi kod, ale muszę go wkleić. Wyjątek jest wrzucany do ostatniej linii poniższego kodu.
namespace Data.Model
{
public class Position
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int PositionID { get; set; }
[Required(ErrorMessage = "Position name is required.")]
[StringLength(20, MinimumLength = 3, ErrorMessage = "Name should not be longer than 20 characters.")]
[Display(Name = "Position name")]
public string name { get; set; }
[Required(ErrorMessage = "Number of years is required")]
[Display(Name = "Number of years")]
public int yearsExperienceRequired { get; set; }
public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }
}
public class Applicant
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int ApplicantID { get; set; }
[Required(ErrorMessage = "Name is required")]
[StringLength(20, MinimumLength = 3, ErrorMessage="Name should not be longer than 20 characters.")]
[Display(Name = "First and LastName")]
public string name { get; set; }
[Required(ErrorMessage = "Telephone number is required")]
[StringLength(10, MinimumLength = 3, ErrorMessage = "Telephone should not be longer than 20 characters.")]
[Display(Name = "Telephone Number")]
public string telephone { get; set; }
[Required(ErrorMessage = "Skype username is required")]
[StringLength(10, MinimumLength = 3, ErrorMessage = "Skype user should not be longer than 20 characters.")]
[Display(Name = "Skype Username")]
public string skypeuser { get; set; }
public byte[] photo { get; set; }
public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }
}
public class ApplicantPosition
{
[Key]
[Column("ApplicantID", Order = 0)]
public int ApplicantID { get; set; }
[Key]
[Column("PositionID", Order = 1)]
public int PositionID { get; set; }
public virtual Position Position { get; set; }
public virtual Applicant Applicant { get; set; }
[Required(ErrorMessage = "Applied date is required")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Date applied")]
public DateTime appliedDate { get; set; }
[Column("StatusID", Order = 0)]
public int StatusID { get; set; }
public Status CurrentStatus { get; set; }
//[NotMapped]
//public int numberOfApplicantsApplied
//{
// get
// {
// int query =
// (from ap in Position
// where ap.Status == (int)Status.Applied
// select ap
// ).Count();
// return query;
// }
//}
}
public class Address
{
[StringLength(20, MinimumLength = 3, ErrorMessage = "Country should not be longer than 20 characters.")]
public string Country { get; set; }
[StringLength(20, MinimumLength = 3, ErrorMessage = "City should not be longer than 20 characters.")]
public string City { get; set; }
[StringLength(50, MinimumLength = 3, ErrorMessage = "Address should not be longer than 50 characters.")]
[Display(Name = "Address Line 1")]
public string AddressLine1 { get; set; }
[Display(Name = "Address Line 2")]
public string AddressLine2 { get; set; }
}
public class ApplicationPositionHistory
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int ApplicationPositionHistoryID { get; set; }
public ApplicantPosition applicantPosition { get; set; }
[Column("oldStatusID")]
public int oldStatusID { get; set; }
[Column("newStatusID")]
public int newStatusID { get; set; }
public Status oldStatus { get; set; }
public Status newStatus { get; set; }
[StringLength(500, MinimumLength = 3, ErrorMessage = "Comments should not be longer than 500 characters.")]
[Display(Name = "Comments")]
public string comments { get; set; }
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime dateModified { get; set; }
}
public class Status
{
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
public int StatusID { get; set; }
[StringLength(20, MinimumLength = 3, ErrorMessage = "Status should not be longer than 20 characters.")]
[Display(Name = "Status")]
public string status { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.IO;
namespace Data.Model
{
public class HRContextInitializer : DropCreateDatabaseAlways<HRContext>
{
protected override void Seed(HRContext context)
{
#region Status
Status applied = new Status() { status = "Applied" };
Status reviewedByHR = new Status() { status = "Reviewed By HR" };
Status approvedByHR = new Status() { status = "Approved by HR" };
Status rejectedByHR = new Status() { status = "Rejected by HR" };
Status assignedToTechnicalDepartment = new Status() { status = "Assigned to Technical Department" };
Status approvedByTechnicalDepartment = new Status() { status = "Approved by Technical Department" };
Status rejectedByTechnicalDepartment = new Status() { status = "Rejected by Technical Department" };
Status assignedToGeneralManager = new Status() { status = "Assigned to General Manager" };
Status approvedByGeneralManager = new Status() { status = "Approved by General Manager" };
Status rejectedByGeneralManager = new Status() { status = "Rejected by General Manager" };
context.Status.Add(applied);
context.Status.Add(reviewedByHR);
context.Status.Add(approvedByHR);
context.Status.Add(rejectedByHR);
context.Status.Add(assignedToTechnicalDepartment);
context.Status.Add(approvedByTechnicalDepartment);
context.Status.Add(rejectedByTechnicalDepartment);
context.Status.Add(assignedToGeneralManager);
context.Status.Add(approvedByGeneralManager);
context.Status.Add(rejectedByGeneralManager);
#endregion
#region Position
Position netdeveloper = new Position() { name = ".net developer", yearsExperienceRequired = 5 };
Position javadeveloper = new Position() { name = "java developer", yearsExperienceRequired = 5 };
context.Positions.Add(netdeveloper);
context.Positions.Add(javadeveloper);
#endregion
#region Applicants
Applicant luis = new Applicant()
{
name = "Luis",
skypeuser = "le.valencia",
telephone = "0491732825",
photo = File.ReadAllBytes(@"C:\Users\LUIS.SIMBIOS\Documents\Visual Studio 2010\Projects\SlnHR\HRRazorForms\Content\pictures\1.jpg")
};
Applicant john = new Applicant()
{
name = "John",
skypeuser = "jo.valencia",
telephone = "3435343543",
photo = File.ReadAllBytes(@"C:\Users\LUIS.SIMBIOS\Documents\Visual Studio 2010\Projects\SlnHR\HRRazorForms\Content\pictures\2.jpg")
};
context.Applicants.Add(luis);
context.Applicants.Add(john);
#endregion
#region ApplicantsPositions
ApplicantPosition appicantposition = new ApplicantPosition()
{
Applicant = luis,
Position = netdeveloper,
appliedDate = DateTime.Today,
StatusID = 1
};
ApplicantPosition appicantposition2 = new ApplicantPosition()
{
Applicant = john,
Position = javadeveloper,
appliedDate = DateTime.Today,
StatusID = 1
};
context.ApplicantsPositions.Add(appicantposition);
context.ApplicantsPositions.Add(appicantposition2);
#endregion
context.SaveChanges(); --->> Error here
}
}
}
29 answers
Szczerze mówiąc Nie wiem jak sprawdzić zawartość błędów walidacji. Visual Studio pokazuje mi, że jest to tablica z 8 obiektami, więc 8 błędów walidacji.
W rzeczywistości powinieneś zobaczyć błędy, jeśli wiercisz do tej tablicy w Visual studio podczas debugowania. Ale możesz również złapać wyjątek, a następnie zapisać błędy do jakiegoś sklepu logowania lub konsoli:
try
{
// Your code...
// Could also be before try if you know the exception occurs in SaveChanges
context.SaveChanges();
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
EntityValidationErrors
jest zbiorem reprezentującym podmioty, których nie można zweryfikować zbiór wewnętrzny ValidationErrors
na encję jest listą błędów na poziomie właściwości.
Te komunikaty walidacyjne są zwykle na tyle pomocne, aby znaleźć źródło problemu.
Edit
Kilka drobnych ulepszeń:
wartość właściwości mogą być zawarte w pętli wewnętrznej tak:
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
ve.PropertyName,
eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
ve.ErrorMessage);
}
Podczas debugowania {[6] } może być lepsze niż Console.WriteLine
, ponieważ działa we wszystkich rodzajach aplikacji, nie tylko aplikacje konsolowe (podziękowania dla @ Barta za notkę w komentarzach poniżej).
Dla aplikacji internetowych, które są w produkcji i które używają Elmah do logowania WYJĄTKÓW okazało się bardzo przydatne dla mnie, aby utworzyć niestandardowy wyjątek i nadpisać SaveChanges
w celu wyrzucenia tego nowego wyjątku.
Niestandardowy typ wyjątku wygląda następująco:
public class FormattedDbEntityValidationException : Exception
{
public FormattedDbEntityValidationException(DbEntityValidationException innerException) :
base(null, innerException)
{
}
public override string Message
{
get
{
var innerException = InnerException as DbEntityValidationException;
if (innerException != null)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine();
sb.AppendLine();
foreach (var eve in innerException.EntityValidationErrors)
{
sb.AppendLine(string.Format("- Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().FullName, eve.Entry.State));
foreach (var ve in eve.ValidationErrors)
{
sb.AppendLine(string.Format("-- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
ve.PropertyName,
eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
ve.ErrorMessage));
}
}
sb.AppendLine();
return sb.ToString();
}
return base.Message;
}
}
}
I SaveChanges
można nadpisać w następujący sposób:
public class MyContext : DbContext
{
// ...
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException e)
{
var newException = new FormattedDbEntityValidationException(e);
throw newException;
}
}
}
Kilka uwagi:
Żółty ekran błędu, który Elmah pokazuje w interfejsie WWW lub w wysłanych e-mailach (jeśli skonfigurowałeś to), wyświetla teraz szczegóły walidacji bezpośrednio na górze wiadomości.
Nadpisanie właściwości
Message
W wyjątku niestandardowym zamiast nadpisywaniaToString()
ma tę zaletę, że standard ASP.NET "Yellow screen of death (YSOD)" wyświetla również ten Komunikat. W przeciwieństwie do Elmah YSOD najwyraźniej nie używaToString()
, ale oba wyświetlają właściwośćMessage
.Owinięcie oryginalnego
DbEntityValidationException
jako wewnętrznego wyjątku zapewnia, że oryginalny ślad stosu będzie nadal dostępny i będzie wyświetlany w Elmah i YSOD.Ustawiając punkt przerwania w linii
throw newException;
, możesz po prostu sprawdzić właściwośćnewException.Message
jako tekst, zamiast wiercić w kolekcjach walidacji, co jest nieco niezręczne i nie wydaje się działać łatwo dla wszystkich (Zobacz komentarze poniżej).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 19:05:48
Możesz to zrobić z Visual Studio podczas debugowania bez pisania kodu,nawet bloku catch.
Wystarczy dodać zegarek o nazwie:
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
Wyrażenie watch $exception
wyświetla każdy wyjątek wyrzucony w bieżącym kontekście, nawet jeśli nie został przechwycony i przypisany do zmiennej.
Na podstawie http://mattrandle.me/viewing-entityvalidationerrors-in-visual-studio/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 07:29:00
To mogłoby to zrobić bez konieczności pisania kodu:
W bloku catch Dodaj punkt przerwania w następującej linii kodu:
catch (Exception exception)
{
}
Teraz, jeśli najedziesz kursorem na exception
lub dodasz go do Watch
, a następnie przejdziesz do szczegółów wyjątku, jak pokazano poniżej; zobaczysz, które kolumny są / są przyczyną problemu, ponieważ ten błąd zwykle występuje, gdy ograniczenie tabeli jest naruszone..
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-22 14:30:07
Oto jak możesz sprawdzić zawartość EntityValidationErrors w Visual Studio (bez pisania dodatkowego kodu), np. podczas debugowania {7]} w IDE .
Problem?
Masz rację, wyskakujące okienko debuggera Visual Studio View Details nie pokazuje rzeczywistych błędów wewnątrz kolekcji EntityValidationErrors
.
Rozwiązanie!
Wystarczy dodać następujące wyrażenie w Quick Watch okno i kliknij Reevaluate .
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
W moim przypadku, zobacz, jak jestem w stanie rozwinąć się w ValidationErrors
List
inside The EntityValidationErrors
collection
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37
Aby szybko zobaczyć pierwszy błąd bez dodawania zegarka, możesz wkleić go w oknie natychmiastowym:
((System.Data.Entity.Validation.DbEntityValidationException)$exception)
.EntityValidationErrors.First()
.ValidationErrors.First()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-17 12:58:28
Dla każdego kto pracuje w VB.NET
Try
Catch ex As DbEntityValidationException
For Each a In ex.EntityValidationErrors
For Each b In a.ValidationErrors
Dim st1 As String = b.PropertyName
Dim st2 As String = b.ErrorMessage
Next
Next
End Try
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-30 10:57:20
Gdy jesteś w trybie debugowania w bloku catch {...}
Otwórz okno " QuickWatch "( ctrl+alt+q ) i wklej tam:
((System.Data.Entity.Validation.DbEntityValidationException)ex).EntityValidationErrors
lub:
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
Jeśli nie jesteś w try/catch lub nie masz dostępu do obiektu wyjątku.
To pozwoli Ci wwiercić się w drzewo. To najprostszy sposób, jaki znalazłem, aby uzyskać natychmiastowy wgląd w te błędy.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 01:29:11
Jeśli po prostu łapiesz ogólny wyjątek, może Ci się przydać umieszczenie go jako DbEntityValidationException . Ten typ wyjątku ma właściwość Validation Errors i nadal rozszerzając swoją drogę do nich, znajdziesz wszystkie problemy.
Na przykład, jeśli umieścisz break point w haczyku, możesz wrzucić następujące elementy do zegarka:
((System.Data.Entity.Validation.DbEntityValidationException ) ex)
Przykładem błędu jest jeśli pole nie zezwala na NULL, a masz łańcuch null, zobaczysz go powiedz, że pole jest wymagane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-12 19:17:06
Wystarczy Sprawdzić Długość Pola Tabeli Bazy Danych . Tekst wejściowy jest większy niż długość pola kolumny typ danych length
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-09 05:11:52
W debugowaniu możesz to wprowadzić w polu QuickWatch expression evaluator:
context.GetValidationErrors()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-09 05:34:48
Odpowiedź od @Slauma jest naprawdę świetna, ale odkryłem, że nie działa, gdy właściwość ComplexType była nieprawidłowa.
Na przykład, powiedzmy, że masz Właściwość Phone
typu complex PhoneNumber
. Jeśli właściwość AreaCode
jest nieprawidłowa, nazwa właściwości w ve.PropertyNames
to " Phone.AreaCode". Powoduje to niepowodzenie wywołania eve.Entry.CurrentValues<object>(ve.PropertyName)
.
Aby to naprawić, możesz podzielić nazwę właściwości na każdą .
, a następnie rekurencyjnie przez wynikową tablicę nazw właściwości. Wreszcie, kiedy dotrzesz na dno łańcuch, można po prostu zwrócić wartość właściwości.
Poniżej znajduje się Klasa @Slauma FormattedDbEntityValidationException
z obsługą złożonych typów.
[Serializable]
public class FormattedDbEntityValidationException : Exception
{
public FormattedDbEntityValidationException(DbEntityValidationException innerException) :
base(null, innerException)
{
}
public override string Message
{
get
{
var innerException = InnerException as DbEntityValidationException;
if (innerException == null) return base.Message;
var sb = new StringBuilder();
sb.AppendLine();
sb.AppendLine();
foreach (var eve in innerException.EntityValidationErrors)
{
sb.AppendLine(string.Format("- Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().FullName, eve.Entry.State));
foreach (var ve in eve.ValidationErrors)
{
object value;
if (ve.PropertyName.Contains("."))
{
var propertyChain = ve.PropertyName.Split('.');
var complexProperty = eve.Entry.CurrentValues.GetValue<DbPropertyValues>(propertyChain.First());
value = GetComplexPropertyValue(complexProperty, propertyChain.Skip(1).ToArray());
}
else
{
value = eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName);
}
sb.AppendLine(string.Format("-- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
ve.PropertyName,
value,
ve.ErrorMessage));
}
}
sb.AppendLine();
return sb.ToString();
}
}
private static object GetComplexPropertyValue(DbPropertyValues propertyValues, string[] propertyChain)
{
var propertyName = propertyChain.First();
return propertyChain.Count() == 1
? propertyValues[propertyName]
: GetComplexPropertyValue((DbPropertyValues)propertyValues[propertyName], propertyChain.Skip(1).ToArray());
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-30 05:46:33
Zauważ, że Entity.GetType().BaseType.Name
podaje nazwę typu, który podałeś, a nie ten, który zawiera wszystkie cyfry szesnastkowe w swojej nazwie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-24 19:48:12
Per @ slauma 's answer and @ Milton' s suggestion I 've extended our base class' s custom Save method with a try/catch that will handle (and therefore log in our error logging!) tego rodzaju wyjątki.
// Where `BaseDB` is your Entities object... (it could be `this` in a different design)
public void Save(bool? validateEntities = null)
{
try
{
//Capture and set the validation state if we decide to
bool validateOnSaveEnabledStartState = BaseDB.Configuration.ValidateOnSaveEnabled;
if (validateEntities.HasValue)
BaseDB.Configuration.ValidateOnSaveEnabled = validateEntities.Value;
BaseDB.SaveChanges();
//Revert the validation state when done
if (validateEntities.HasValue)
BaseDB.Configuration.ValidateOnSaveEnabled = validateOnSaveEnabledStartState;
}
catch (DbEntityValidationException e)
{
StringBuilder sb = new StringBuilder();
foreach (var eve in e.EntityValidationErrors)
{
sb.AppendLine(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name,
eve.Entry.State));
foreach (var ve in eve.ValidationErrors)
{
sb.AppendLine(string.Format("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName,
ve.ErrorMessage));
}
}
throw new DbEntityValidationException(sb.ToString(), e);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 16:02:41
Musiałem to napisać w oknie: 3
(((exception as System.Data.Entity.Validation.DbEntityValidationException).EntityValidationErrors as System.Collections.Generic.List<System.Data.Entity.Validation.DbEntityValidationResult>)[0].ValidationErrors as System.Collections.Generic.List<System.Data.Entity.Validation.DbValidationError>)[0]
Aby zagłębić się w dokładny błąd !
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-14 09:03:50
Korzystając z odpowiedzi @Slauma zrobiłem fragment kodu (fragment z snippetem) dla lepszego wykorzystania.
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
<Title>ValidationErrorsTryCatch</Title>
<Author>Phoenix</Author>
<Description>
</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>
</Shortcut>
</Header>
<Snippet>
<Code Language="csharp"><![CDATA[try
{
$selected$ $end$
}
catch (System.Data.Entity.Validation.DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-14 19:57:41
Złap wyjątek w Try catch, a następnie quick watch lub ctrl + d & ctrl + q i możesz przejść do EntityValidationErrors.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-07 13:24:07
Wrzuciłem tylko moje 2 centy...
W mojej konfiguracji dbConfiguration.cs, Lubię owijać w bawełnę.SaveChanges () metoda do try / catch i produkować wyjściowy plik tekstowy, który pozwala mi odczytać błąd(y) wyraźnie, a ten kod również timestamps je-przydatne, jeśli uruchomić więcej niż jeden błąd w różnych czasach!
try
{
context.SaveChanges();
}
catch (DbEntityValidationException e)
{
//Create empty list to capture Validation error(s)
var outputLines = new List<string>();
foreach (var eve in e.EntityValidationErrors)
{
outputLines.Add(
$"{DateTime.Now}: Entity of type \"{eve.Entry.Entity.GetType().Name}\" in state \"{eve.Entry.State}\" has the following validation errors:");
outputLines.AddRange(eve.ValidationErrors.Select(ve =>
$"- Property: \"{ve.PropertyName}\", Error: \"{ve.ErrorMessage}\""));
}
//Write to external file
File.AppendAllLines(@"c:\temp\dbErrors.txt", outputLines);
throw;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-03 14:05:51
To, co znalazłem...kiedy dostałem błąd "EntityValidationErrors" jest to....mam pole w mojej bazie danych 'db1' w tabeli ' tbladdress 'jako ' address1', które ma rozmiar 100(tzn. adres varchar (100) null) i przekazywałem Wartość więcej niż 100 znaków..a to prowadzi do błędu podczas zapisywania danych do bazy danych....
Więc musisz sprawdzić dane, które przekazujesz do pola.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-28 09:36:24
To mi pasuje.
var modelState = ModelState.Values;
if (!ModelState.IsValid)
{
return RedirectToAction("Index", "Home", model);
}
Umieścić punkt przerwania na instrukcji if. Następnie możesz sprawdzić modelState w oknach debugowania. Na każdej wartości można zobaczyć, czy jest błąd, a nawet Komunikat o błędzie. To wszystko. Kiedy już go nie potrzebujesz, po prostu usuń lub skomentuj linię.
Mam nadzieję, że to pomoże.Jeśli zapytasz, mogę dostarczyć szczegółowy zrzut ekranu w oknie debugowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-23 19:26:49
Jak wspomniano w innych postach, po prostu złap wyjątek w klasie DbEntityValidationException. Co da Ci wszystko, czego potrzebujesz podczas przypadków błędów.
try
{
....
}
catch(DbEntityValidationException ex)
{
....
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-21 04:26:07
Spotkałem się z tym błędem przed
Kiedy próbowałem zaktualizować określone pole w moim modelu w entity framwork
Letter letter = new Letter {ID = letterId, ExportNumber = letterExportNumber,EntityState = EntityState.Modified};
LetterService.ChangeExportNumberfor(letter);
//----------
public int ChangeExportNumber(Letter letter)
{
int result = 0;
using (var db = ((LettersGeneratorEntities) GetContext()))
{
db.Letters.Attach(letter);
db.Entry(letter).Property(x => x.ExportNumber).IsModified = true;
result += db.SaveChanges();
}
return result;
}
I zgodnie z powyższymi odpowiedziami
I found the Validation message The SignerName field is required.
Które wskazuje na pole w moim modelu
I kiedy sprawdzałem schemat bazy danych znalazłem
Więc off coure ValidationException
ma prawo podnieść
I zgodnie z tym polem chcę aby było nullable, (Nie wiem jak
Więc zmieniłem to pole, aby zezwalać na Null, a przez to mój kod nie spowoduje więcej tego błędu
Więc ten błąd może się zdarzyć, jeśli unieważnisz integralność danych w bazie danych
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:31
Proszę sprawdzić wartości pól, które przekazujesz, są poprawne i zgodne z polami bazy danych. Na przykład liczba znaków przekazywanych w danym polu jest mniejsza niż znaki zdefiniowane w polu tabela bazy danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-07 03:24:18
W moim przypadku było to spowodowane tym, że długość pola bazy danych jest mniejsza niż długość pola wejściowego.
Tabela bazy danych
create table user(
Username nvarchar(5) not null
);
Moje wejście
User newUser = new User()
{
Username = "123456"
};
Wartość dla Username
length
na 5 czyli lessthan
6
...to może komuś pomóc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-08 18:41:02
Również zmagał się z tym błędem i bazując na tym temacie i Ta odpowiedź była w stanie dowiedzieć się, co należy skopiować/wkleić bez potrzeby zastanawiania się, co ma być zaimportowane (doskonały dla początkujących w C#), kod poniżej:
try
{
context.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
foreach (var entityValidationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in entityValidationErrors.ValidationErrors)
{
System.Diagnostics.Debug.WriteLine("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-16 11:04:17
Jeśli używasz IIS z uwierzytelnianie Windows i Entity Framework , Należy uważać, aby używać authorize
.
Próbowałem POST
bez autoryzacji i nie zadziałało, i dostałem ten błąd na db.SaveChangesAsync();
, podczas gdy wszystkie inne czasowniki GET
i DELETE
działały.
Ale kiedy dodałem AuthorizeAttribute jako adnotację, zadziałało.
[Authorize]
public async Task<IHttpActionResult> Post(...){
....
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-18 12:56:26
Oto inny sposób, aby to zrobić, zamiast używać pętli foreach do zaglądania do wnętrza EntityValidationErrors. Oczywiście możesz sformatować wiadomość według własnych upodobań :
try {
// your code goes here...
}
catch (DbEntityValidationException ex)
{
Console.Write($"Validation errors: {string.Join(Environment.NewLine, ex.EntityValidationErrors.SelectMany(vr => vr.ValidationErrors.Select(err => $"{err.PropertyName} - {err.ErrorMessage}")))}", ex);
throw;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-16 14:47:49
Ten błąd występuje głównie z powodu rozmiaru pola. Sprawdź wszystkie rozmiary pól w tabeli bazy danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-25 02:32:16
Sprawdź, czy masz Not Null
ograniczenie w kolumnach tabeli i nie przekazujesz wartości dla tej kolumny podczas operacji insert/Update.
To powoduje ten wyjątek w ramach encji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 11:32:20
Ja również stanąłem przed tym samym problemem. Zaktualizowałem mój .edmx z bazy danych po tym wyjątek zniknął.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-04 19:01:35