1
私は2つのエンティティを持っています。EF 4.1バイト[]がDbContextからロードされていません
public class Foo
{
public virtual int FooId {get; set; }
public virtual IList<Bar> Bars { get; set; }
public virtual DateTime Date { get; set; }
}
public class Bar
{
public virtual int BarId { get; set;}
public virtual byte[] Value { get; set; }
public virtual DateTime Date { get; set; }
public virtual IList<Foo> Foos { get; set; }
}
私はFooIdによって、データベースからのFooをロードすると、それは私がバーに移動すると、それはデータベースから正しいBarIdと日付を持っていますが、値は常にバイトで、完全に水和[0]。
なぜですか?
データベースはvarbinary(300)列です。
データベース内の値Iは、Management Studioでselect * from Bar
を行う場合は、
BarId Value Date
1 0x20CF30467ABD 10/19/2011
考えを示しましたか?
マイマップ:
public class FooConfiguration : EntityTypeConfiguration<Foo>
{
public FooConfiguration()
{
ToTable("Foo");
HasKey(m => m.FooId);
Property(m => m.Date);
HasMany(m => m.Bars)
.WithMany(l => l.Foos)
.Map(m =>
{
m.ToTable("FooBars");
m.MapLeftKey("FooId");
m.MapRightKey("BarId");
});
}
}
public class BarConfiguration : EntityTypeConfiguration<Bar>
{
public BarConfiguration()
{
ToTable("Bar");
HasKey(m => m.BarId);
Property(m => m.Value);
Property(m => m.Date);
HasMany(m => m.Foos)
.WithMany(l => l.Bars)
.Map(m =>
{
m.ToTable("FooBars");
m.MapLeftKey("BarId");
m.MapRightKey("FooId");
});
}
}
私の設定では、Keyプロパティのみがマップされており、他のキーマップはマップされていないことがわかりました。これは、デフォルトでEFがプロパティ名を列名にマップしようとしているからだと仮定していますか?また、関連付けは、バーではなくFoo設定でのみ設定されます。私は、特別なプロパティのマッピングを特別に削除し、その違いがあるかどうかを調べるつもりです。 – Adam
そうです。プロパティがdbと同じ名前を持つ場合、マッピングの必要はありません。 1つのエンティティで関連付けを定義する場合は、別のエンティティで関連付けを定義する必要はありません。 –
最後にこれを試してみました。あなたが正しいです、それはあなたがモデル構成に行ったリファクタリングなしでさえ、動作します。私は私の実際のマッピングをもう少し調べ、そこで何が起こっているのかを調べる必要があると思います。再度、感謝します。 – Adam