我正在用一个实体创建一个非常简单的EF4代码第一个项目。
public class Activity
{
public Guid Id { get; set; }
public string Description { get; set; }
public List<DateTime> DateDone { get; set; }
<snip>
public Activity()
{
if(DateDone==null)
DateDone = new List<DateTime>();
}
}
我重建我的项目,然后运行MVC3应用程序并生成数据库(确认,我已添加和删除了列),我的数据是种子(当我修改种子数据时,它会在屏幕上更改)
我能够:
var activity = db.Activities.Find(id);
activity.DateDone = DateTime.Now;
db.SaveChanges();
但数据未保存。我检查了数据库,因为只有一个表(Activity),它有所有相应的字段。我希望它应该有第二个表,ActivityDateDone有两个字段,ActivityGuid&amp; DateDone。
我在做这项工作时缺少什么?
答案 0 :(得分:6)
实体框架不支持基本类型的集合。
您需要定义一个单独的类来保存DateTimes。
答案 1 :(得分:2)
DateTime不是实体。如果希望代码首先为您创建数据结构,则需要创建模型类。我假设您的活动表有一个DateDone列?
答案 2 :(得分:0)
虽然Entity Framework本身不支持此功能,但您可以使其工作得非常好。
请参阅此答案,了解附加代码(PersistableScalarCollection)和原创意见:https://stackoverflow.com/a/11990836/1742393
/// <summary>
/// ALlows persisting of a simple DateTime collection.
/// </summary>
[ComplexType]
public class PersistableDateTimeCollection : PersistableScalarCollection<DateTime>
{
protected override DateTime ConvertSingleValueToRuntime(string rawValue)
{
return DateTime.Parse(rawValue);
}
protected override string ConvertSingleValueToPersistable(DateTime value)
{
return value.ToShortDateString();
}
}