【发布时间】:2015-01-05 04:35:20
【问题描述】:
我正在使用 ASP.NET MVC5 和 MS SQL 2008 以及 EntityFramework 6,在我的应用程序中,我有一个类 Experiences,它允许客户从一个时期到另一个时期添加他们的体验细节:
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; }
}
FromDate 格式将为 MMM yyyy,例如 Jan 2009、Oct 2010 等 ToDate 格式将为 MMM yyyy 或 Present,并且应大于或等于 FromDate 值,例如:
- 从 = 2010 年 1 月,到 = 2014 年 10 月 ==> 接受
- 从 = 2010 年 1 月,到 = 现在 ==> 接受
- 从 = 2014 年 10 月,到 = 2014 年 7 月 ==> 拒绝 到日期的值应该大于开始日期
我的课程周期如下
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;}
}
示例DEMO
在 sql 中我创建了以下数据类型
create type Period from nvarchar(8) not null;
问题:
- 如何在 sql 中定义 Period?
- 如何告诉 EntityFramework 将 period 链接到 sql 中的数据类型 period?
任何想法将不胜感激
【问题讨论】:
-
我认为 ef 中没有对此进行任何验证。您可以通过对客户端和服务器使用自定义验证来做到这一点。您还需要任何客户端验证吗?否则,您可以在服务器中添加几个代码或为其扩展新的过滤器。
-
我认为有一种方法我可以肯定,因为 EF 是一项伟大的技术,并且确保他们没有错过这个细节,我正在等待看看是否有人可以确认这一点,否则我会感到失望跨度>
-
尝试使用继承自ValidationAttribute的比较属性。
标签: c# sql-server entity-framework