2014-12-07 77 views
3

我期待在實體使用新地理類型框架5,6爲我的下一個項目 - 我已經創建了這個教程鏈接http://msdn.microsoft.com/en-us/data/jj250903.aspx在C#中的實體使用SQL Server地理而不引用實體框架

一個MyProject.Entities包含我的實體模型的Visual Studio庫項目。我預見到的問題是,我需要在項目MyProject.Entities項目中引用Entity Framework 5+,以便在使用實體框架(或實體框架)映射此項時,使用對應於我的SQL Server數據庫中的geography列的DbGeography類型至少看起來是基於上述教程鏈接中的說明)。我不想直接引用我的MyProject.Entities項目中的實體框架,因爲我打算通過可能使用不同版本的實體框架的多個項目共享此庫。在風格方面,我還想保持MyProject.Entities項目儘可能簡單和乾淨 - 將實體項目耦合到實體框架看起來很醜陋。

這裏是我的模型之一的一個簡單的例子:

namespace MyProject.Entities 
{ 
    public class PointOfInterest 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public DbGeography Geo { get; set; } 
    } 
} 

任何人都有這個問題?如果是這樣,你是如何解決它的?

編輯:我想到一個很好的方式來表達我的關注。新的OWIN身份模型提供了像IUser這樣的接口,以便開發者可以在不直接引用實體框架的情況下編寫他們自己的實現,例如, https://code.msdn.microsoft.com/Simple-Aspnet-Identiy-Core-7475a961。不幸的是DbGeography似乎沒有實現這樣一個接口http://referencesource.microsoft.com/#System.Data.Entity/System/Data/Spatial/DbGeography.cs,所以我堅持引用實體框架。

+2

也許只是使用http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlgeography.aspx代替 – ErikEJ 2014-12-07 14:08:05

+0

謝謝ErikEJ,看起來很有希望。我會嘗試一下。 – 2014-12-07 20:48:25

回答

1

也許你可以只使用

Microsoft.SqlServer.Types.SqlGeography 

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlgeography.aspx

+0

哦,噓。我確信這是答案。但在將實體映射到DataContext後,出現此錯誤:_error 3004:從第6行開始映射片段時出現問題:未在Set PointsOfInterests._中爲屬性PointOfInterest.Geo指定映射。 「Geo」屬性的類型爲「SqlGeography」,並與數據庫列名稱匹配。我查了一下,看來Linq to SQL根本不支持'SQLGeography' - http://stackoverflow.com/a/2846053/201648。有一個SQL Server UDF實現來解決同一線程上的問題 - http://stackoverflow.com/a/2968633/201648 – 2014-12-08 11:27:46

+1

如果您必須聯繫您的類與EF,您必須使用DbGeography – ErikEJ 2014-12-08 11:31:23

+0

謝謝ErikEJ。將根據上述評論標記爲答案。 – 2014-12-08 11:32:43