ASP.NETMVC3コードファーストでEntityFrameworkを使用しています。
私は次のようなプロジェクトエンティティとロゴを持っています:
public class Project
{
[Key]
public int ProjectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Logo Logo { get; set; }
}
public class Logo
{
[Key]
public int LogoID { get; set; }
public string LogoName { get; set; }
public byte[] LogoContent { get; set; }
public string LogoContentType { get; set; }
}
各プロジェクトには、0または1つのロゴを付けることができます。
データベース(SQLサーバー)を作成すると、ロゴを参照するためのフィールドがプロジェクトテーブルに作成されていることがわかります。
プロジェクトテーブルにロゴを参照するプロジェクトがある場合は常に、Logo_LogoIDにロゴテーブルの対応するキーを入力します。それは私にとっては大丈夫です。私にとって奇妙に思えるのは、ロゴを削除すると、SQLサーバーに以下のエラーが表示されることです。
したがって、ロゴテーブルからロゴを削除できるようにするには、最初にプロジェクトテーブルから参照を解除し(LogoIDをNULLに置き換えることにより)、次にロゴから行を削除する必要があります。
多分物事を参照するより良い方法がありますか?
これはばかげた質問に思えるかもしれません。
より良い解決策は、逆の関係、つまりロゴテーブルに追加されたProjectIDフィールドを持つことだと思います。そのため、ロゴを削除する必要があるときはいつでも、ロゴを簡単に削除できます。
どう思いますか?
ありがとう。
編集
Mark Oretaが提案するように、私は次のことを試しました。
modelBuilder.Entity<Project>()
.HasOptional(p => p.Logo)
.WithOptionalPrincipal();
しかし、ProjectIDへの二重参照を取得しました。
なぜですか?