25

长时间的听众,第一次来电(终于在这里注册了一个帐户!)...

我正在使用带有.NET 4.5.1Entity Framework 6(最终版本,不是 RC 或 beta)的Visual Studio 2013 。

尝试将 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.

我已经确认我没有引用旧版本的实体框架(在此处讨论)。我一直在使用这篇文章这篇 MSDN 文章作为示例/信息,因为这是我第一次涉足 .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; }
}

我究竟做错了什么?

4

2 回答 2

33

事实证明,这与我从 Microsoft 自己在 Codeplex 的类似问题的回复中读到的相反,甚至与他们在此处的文档中看到的相反。我解释错了吗?这两个链接都表明,在 EF 6 中,DbGeography 数据类型已从 System.Data.Entity.Spatial 移至 System.Data.Spatial,但反过来似乎也是如此。

我变了

using System.Data.Spatial;

using System.Data.Entity.Spatial;

它有效。

于 2013-10-23T20:57:34.603 回答
1

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

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

于 2021-02-15T11:11:10.407 回答