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 のセッター関数をスキップしました。_id = value を Id プロパティに追加すると、問題が解決しました。ふぅ..!

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