FooとBarの間には関係がないようです。この構造により1から0へ... 1つの関係
public class Foo
{
[Key]
public int Id { get; set; }
public int Name { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
[Key]
public int Id { get; set; }
public int Name { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
}
私は、通常はFooで
public virtual ICollection<Bar> Bars { get; set; }
を持っていますが、この例では、それは私のデータの実行可能な表現ではありません。いつもあなたが見
....
フーは常にバー を持っていないだろう...しかし... バーは常にのFooとそのFooIdを持つことになりますバーで一意であること。
public class MyContext : DbContext
{
public DbSet<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// ...............
modelBuilder.Entity<Foo>()
.HasOptional(cpi => cpi.Bar)
.WithRequired(api => api.Foo);
// ...............
}
}
私は関係を定義する際に複数の試行を試みましたが、正しいと思われませんでした!私はまた、それが私が欲しいものをすることを可能にするならば、ヌル可能なBarIdをFooに加えることができます(しかし私はそうしたくないです)。 (編集1を参照)
私はそれをたくさん試してみました(そして検索して試してみました)。
すべての入力をいただければ幸いです。
おかげ
(浪費家のコメントに応答して)編集1:
私はせずに解決策を見つけるしたいと思いますので、これらのテーブルには、すでにライブ環境の数で存在し、データに満ちていますdbテーブルの定義を編集する...しかし、それが可能でない場合、私は必要なものを達成するために列を追加することができます。
は以前、私はそれが
public virtual ICollection<Bar> Bars { get; set; }
...のように定義持っていた...しかし、それは私がこれらのテーブルを使用して書いていたコードの一部では動作しません。
編集2:私がしようとするとバーを追加するとき
上記のコードは、次のエラーが発生します。
"IDENTITY_INSERTがOFFに設定されている場合、テーブル 'Bar'のID列に明示的な値を挿入できません。
アイデンティティの挿入がオフになっていない、私はこれらのテーブルの自分の定義に基づいてEFがオフになっているこのインスタンスを除いて、すべてのテーブルに使用します。
は「それは私がやりたいように私を可能にする場合、私はまた、fooへのNULL可能BarIdを追加することができます(私は希望しないように)」正しい答えは、あなたがしたくない何かがあるときは、あなたのケースでこれがなぜ適切でないのかについての正当な理由があるはずです。なぜあなたはこれをしたくないのですか? – spender
編集1 – Beakie
を参照してください。ヌルを許可するデータベーススキーマに外部キーが必要ですか? – spender