コード ファーストを使用して、関係を定義しました。
modelBuilder.Entity<ChildObject>()
.HasRequired(child => child.ParentObject)
.WithMany()
.WillCascadeOnDelete(false);
このクラスから他の 1 対多のプロパティを読み取ることができます。残念ながら、から値を読み取ろうとすると、次のchild.ParentObject
例外がスローされます。
関係の多重度制約違反が発生しました: EntityReference は複数の関連オブジェクトを持つことはできませんが、クエリは複数の関連オブジェクトを返しました。これは回復不可能なエラーです。
正しいスキーマを生成しているように見えるため、そのエラーがどのように発生するかは完全にはわかりません。
CREATE TABLE [dbo].[ChildObject]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](128) NOT NULL,
[ParentObject_ID] [int] NOT NULL,
);
CREATE TABLE [dbo].[ParentObject]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NOT NULL,
);
ただし、デバッガーでこの式を一度評価すると、デバッガーがエラーをキャッチすると、剃刀ページが正常にレンダリングされることがわかりました。それで、私はこれを行うことでそれを機能させることができることに恐怖に気づきました:
@try
{
@(this.Model.ParentRecord.Name)
}
catch (InvalidOperationException)
{
@(this.Model.ParentRecord.Name)
}
もちろん、これは絶対にばかげています。実際にメインの開発ブランチにマージしようとすると、次のコード レビューで笑いものになります。この一貫性のない動作は非常にバグのように思えます。回避方法を学びたいと思います。Microsoft Connect で同様の問題を検索しようとしましたが、このような問題は見つかりません。この問題に遭遇したのは私が初めてではないでしょうか?