2011-11-30 58 views
1

我正在用一个实体创建一个非常简单的EF4代码第一个项目。EF代码优先列表<DateTime>不创建表格

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(); 

但数据不会被保存。我检查了数据库,因为只有一个表(活动),它有所有适当的字段。我期望它应该有第二个表,ActivityDateDone有两个字段,ActivityGuid & DateDone。

我在做这项工作时缺少什么?

回答

6

实体框架不支持基元类型的集合。

您需要定义一个单独的类来保存日期时间。

2

DateTime不是一个实体。如果您希望代码先为您创建数据结构,则需要创建模型类。我假设你的活动表有一个DateDone列?

0

虽然实体框架本身不支持这一点,但您可以使其工作得很好。

请参阅这个答案额外的代码(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(); 
    } 
} 
相关问题