2010-04-15 75 views
4

我使用Visual Studio 2010 RTM與.NET/Entity Framework 4 RTM一起使用模型驅動的設計方法。 當我使用DateTimeOffset字段創建實體時,EF建模者試圖將DateTimeOffset映射到SQL日期時間而不是SQL datetimeoffset。 我正在使用SQL Server 2008 Express,因此datetimeoffset在數據庫中受支持。實體框架4將DateTimeOffset映射到Visual Studio 2010中的SQL datetime

的Visual Studio想出了這個錯誤:

Error 2019: Member Mapping specified is not valid. The type 'Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]' of member 'Created' in type 'Data.SqlStorage.MyType' is not compatible with 'SqlServer.datetime[Nullable=False,DefaultValue=,Precision=3]' of member 'Created' in type 'Data.SqlStorage.Store.MyTypes

如果我直接在EDMX StorageModels XML節我收到以下錯誤編輯類型:

Error 40: The Type datetimeoffset is not qualified with a namespace or alias. Only PrimitiveTypes can be used without qualification.

爲什麼沒有建模只是正確地將其映射到SQL datetimeoffset類型? 當我還在使用Visual Studio 2010的測試版本時,也出現了此問題。& .NET Framework 4.

回答

1

嘗試以其他方式(DB-> Model)。 It worked for Julie Lerman。在我看來,如果您使用命名空間限定DateTimeOffset,則您的手動編輯的EDMX也應該可以工作。

+1

解決方案是從DB更新一次。之後,可能會得到解決,因爲現在我可以手動將類型更改爲datetimeoffset而無需抱怨VS。仍然有點惱火,我不得不手動改變它,而建模者本身並沒有正確設置它。 – Carvellis 2010-06-02 14:12:15

+0

你可以去DB => Model來看看它是如何完成的,但是我發現在XML中增加'precision =「7」'屬性可以解決這個問題。 – 2014-12-03 19:18:14

1

解決方案是從DB更新一次,之後在腳本中手動更改sql並生成數據庫。我做了它,並檢查了我的表映射後,數據類型被修改爲DATE而不是DATETIME。我認爲如果您想更改爲DATETIME2,可以應用相同的方法。

5

在RTM版本中,你可以做這樣的事情在你的DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    modelBuilder.Entity<EntityName>().Property(p => p.PropertyName).HasColumnType("datetimeoffset"); 
} 

這也告訴了實體框架代碼首先要產生你的數據庫,而不是使用日期時間的DATETIME2有用。