2011-11-30 40 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(); 
    } 
}