EntityType'DbGeography'没有定义键

时间:2013-10-23 19:57:58

标签: c# .net entity-framework entity-framework-5 sqlgeography

长时间听众,第一次来电(最后在这里开了帐户!)......

我正在使用 Visual Studio 2013 .NET 4.5.1 实体框架6 (最终版本,而非RC或测试版)。

尝试向我的实体添加DbGeography属性时,执行时出现此错误:

    One or more validation errors were detected during model generation:
    Geocoder.DbGeography: : EntityType 'DbGeography' has no key defined.
    Define the key for this EntityType.
    DbGeographies: EntityType: EntitySet 'DbGeographies' is based on type 'DbGeography' that has no keys defined.

我已经确认我没有引用旧版本的Entity Framework(讨论here)。我一直在使用this postthis MSDN article作为示例/信息,因为这是我第一次涉及.NET中的空间类型(以及SQL Server,就此而言)。

这是我的实体:

public class Location
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public virtual State State { get; private set; }
    public string ZipCode { get; set; }
    public string ZipCodePlus4 { get; set; }
    public DbGeography Geocode { get; set; }
    public Hours Hours { get; set; }
    public virtual ICollection<Language> Languages { get; private set; }
    public virtual OfficeType OfficeType { get; private set; }

    [JsonIgnore]
    public virtual ICollection<ProviderLocation> Providers { get; private set; }
}

我做错了什么?

2 个答案:

答案 0 :(得分:32)

这与我在微软自己对Codeplex here中的类似问题,甚至是他们的documentation here的回复中所读到的相反。我错误地解释了吗?这两个链接都表明在EF 6中,DbGeography数据类型已从System.Data.Entity.Spatial移动到System.Data.Spatial,但反过来似乎是正确的。

我改变了

using System.Data.Spatial;

using System.Data.Entity.Spatial;

它有效。

答案 1 :(得分:1)

对于可能在 EF6(2021 年)中遇到此问题的其他任何人,请尝试使用 System.Data.Spatial.DbGeographyWellKnownValue 而不是 System.Data.Spatial.DbGeography

这解决了我的问题。 (虽然不熟悉如何解决错误的复杂细节。)