Ich benutze ASP.NET MVC5 und MS SQL 2008 und EntityFramework 6, in meiner Anwendung habe ich eine Klasse Erfahrungen, die den Kunden erlauben, Details ihrer Erfahrungen aus Periode bis Periode hinzufügen:Verknüpfung von Entityframework zu einem neuen Sql DataType
public class Experience
{
public int Id { get; set; }
public string Title { get; set; }
public string Company { get; set; }
public string FromDate { get; set; }
public string ToDate { get; set; }
public string Description { get; set; }
}
wird das Format MMM yyyy Fromdate, Beispiel Jan 2009, 2010, ... etc Oktober wird das ToDate sein Format entweder MMM yyyy oder vorhanden sein und sollte zum Beispiel als oder gleich dem Wert Fromdate größer sein:
- Von = Jan 2010, Bis = Oct 2014 ==>Akzeptierte
- Von = Januar 2010, Gegenwart == To => Akzeptiert
- Von = Oktober 2014, To = == Juli 2014>Abgelehntder Wert sollte eine aktuelle größer ist als die von Datum
ich machte die Klasse Periode folgen, wie
public class Period: IComparable
{
public Period()
{
this.Month="Present";
}
public Period(string Month,int Year)
{
this.Month=Month;
this.Year=Year;
}
public int CompareTo(object obj)
{
if(obj==null)
return 1;
Period period = obj as Period;
if (period != null)
{
if(this.Month=="Present" && period.Month=="Present")
return 0;
else if(period.Month=="Present")
return -1;
else if(this.Month=="Present")
return 1;
else
{
DateTime date;
DateTime periodDate;
if(!DateTime.TryParse(string.Format("01 {0} {1}",Month,Year),out date))
throw new ArgumentException("Instance is not a valid Period!");
if(!DateTime.TryParse(string.Format("01 {0} {1}",period.Month,period.Year),out periodDate))
throw new ArgumentException("Object is not a valid Period!");
return date.Date.CompareTo(periodDate.Date);
}
}
else
throw new ArgumentException("Object is not a Period");
}
public override int GetHashCode()
{
if(this==null)
return 0;
else
{
DateTime date;
if(!DateTime.TryParse(string.Format("01 {0} {1}",Month,Year),out date))
throw new ArgumentException("Instance is not a valid Period!");
return date.GetHashCode();
}
}
public override bool Equals(object obj)
{
return this.CompareTo(obj)==0;
}
public static bool operator==(Period left, Period right)
{
return left.Equals(right);
}
public static bool operator!=(Period left, Period right)
{
return !(left==right);
}
public static bool operator<(Period left, Period right)
{
return left.CompareTo(right)<0;
}
public static bool operator>(Period left, Period right)
{
return left.CompareTo(right)>0;
}
public override string ToString()
{
if(string.IsNullOrWhiteSpace(Month))
return string.Empty;
else if(Month=="Present")
return Month;
else
return string.Format("{0} {1}",Month,Year);
}
public string Month{get; set;}
public int Year{get; set;}
}
Probe DEMO
in SQL habe ich den folgenden Datentyp
create type Period from nvarchar(8) not null;
Fragen:
- Wie kann ich die Zeit in den SQL definieren?
- Wie kann ich EntityFramework sagen, Zeitraum mit dem Datentyp Zeitraum in SQL verknüpfen?
wird jede Idee
ich es nicht glaube, wird dazu beitragen, ist jede Validierung für diese in ef.You können es durch benutzerdefinierte Validierung mit für Client und Server. Benötigen Sie auch eine Client-Validierung? Sonst können Sie einfach ein paar Code im Server hinzufügen oder einen neuen Filter dafür hinzufügen. – Binod
Ich denke, es gibt einen Weg, ich bin sicher, da EF ist eine großartige Technologie und sicher, dass sie diese Details nicht verpassen, ich warte, um zu sehen, ob jemand dies bestätigen kann oder ich werde enttäuscht sein – mah
versuchen, zu verwenden, vergleichen Attribut erben von ValidationAttribute . – Binod