3

我被困在我的项目中,非常感谢任何帮助。我正在使用EF 5 Code-First方法。

这是我的基本实体:

...
public virtual Guid Id
    {
        get
        {
            return _id;
        }
        protected set { }

    }

public virtual bool IsEnabled { get; set; }
...

我的实体:

...
public string CountryName { get; set; }
public string CountryCode { get; set; }
public Coordinate CountryCoordinate { get; set; }
public virtual ICollection<City> Cities
{
    get
    {
        if (_cities == null)
        {
            _cities = new HashSet<City>();
        }

        return _cities;
    }
    private set
    {
        _cities = new HashSet<City>(value);
    }
}
...

它的配置:

public CountryEntityConfiguration()
{
this.HasKey(c => c.Id);

this.Property(c => c.CountryName)
    .HasMaxLength(64)
    .IsRequired();

this.Property(c => c.CountryCode)
    .HasMaxLength(4)
    .IsRequired();

this.HasMany(c => c.Cities)
    .WithRequired()
    .HasForeignKey(ci => ci.CountryId)
    .WillCascadeOnDelete(true);
}

存储库还有其他东西,坐标值对象和城市的复杂类型等。

现在,当我尝试通过 CountryRepository 调用 GetEntity(Guid Id) 时,我收到一条错误消息:

作为对象键一部分的属性值与存储在 ObjectContext 中的相应属性值不匹配。如果作为键的一部分的属性返回不一致或不正确的值,或者在对作为键的一部分的属性进行更改后未调用 DetectChanges,则可能会发生这种情况。

我进行了很多搜索,但每个答案都是关于组合 PK、空列等。在测试时,我为 DB 播种,可以看到行和列都可以。

那么我做错了什么,有什么想法吗?

4

2 回答 2

5

好的,我终于可以弄清楚了。这是导致问题的带有空设置器的实体库。不知何故(可能是下班后)我跳过了 ID 的 setter 函数。所以将 _id = value 添加到 Id 属性解决了这个问题。呸..!

public virtual Guid Id
{
    get { return _id; }
    protected set { _id = value }
}
于 2013-02-12T16:35:54.270 回答
0

我有相同的异常消息,但原因却截然不同。我有一个字符串 Id 列被尾随空格污染。尝试查看您在 Id 列中的值是否包含空格。

于 2020-02-05T13:10:17.150 回答