12

ナビゲーションプロパティの命名/生成に関して、EntityFrameworkがどのようなルールに従うのか知りたいです。私は意味をなさないように思われるいくつかのシナリオを観察したので、誰かがこれらがどのように機能するかを正確に知っているかどうか疑問に思いました。

シナリオ1:

public class Post
{
    public int Id { get; set; }
    public User Author { get; set; }
} 

   生成します

シナリオ1

すなわち。デフォルトでは、ナビゲーションプロパティは[PropertyName]_Idという名前のFKを生成します

シナリオ2:

ただし、FKIdを手動で指定したときにEFが[PropertyName]_Idの形式のプロパティを生成する場合、同じルールに従うことは理にかなっています。

public class Post
{
    public int Id { get; set; }
    public int? Author_Id { get; set; }
    public User Author { get; set; }
}

   生成します

シナリオ2

ご覧のとおり、これはnavプロパティとして自動的に登録されません。

シナリオ3:

シナリオ2で機能しない場合、別の命名規則で機能するのはなぜですか?

public class Post
{
    public int Id { get; set; }
    public int? AuthorId { get; set; }
    public User Author { get; set; }
}

   生成します

シナリオ3

ナビゲーションプロパティの検出と生成に関するルールは何ですか?

4

2 に答える 2

12

これは予想される動作であり、EFに基づく2つの異なる規則に基づいています。

  • 最初の例では、エンティティにFKプロパティがない独立した関連付けを使用しています。EFは、単純なパターンを使用してデータベースにFKを作成します。NameOfNavigationProperty_NameOfRelatedPKこの規則は、従来のデータベースの命名に従います。
  • 2番目の例では、EFで使用されるFKと同じ名前でプロパティを定義しました。EFはこれを検出し、生成されたFKに1を追加しました。プロパティがFKとして使用されない理由は、FKプロパティを検索する2番目の規則です。この規則では、FKプロパティに次の名前が付けられることを想定しています(規則は従来の.NETの命名に従います)。
    • NameOfNavigationPropertyNameOfRelatedPKによって提供されたNavigationPropertyNameForeignKeyDiscoveryConvention
    • NameOfRelatedTypeNameOfItsPKによって提供されたTypeNameForeignKeyDiscoveryConvention
    • NameOfRelatedPKによって提供されたPrimaryKeyNameForeignKeyDiscoveryConvention
  • 最後の例では、FKプロパティを正しく定義し、EFがそれを検出したため、外部キーの関連付けが使用されます。
于 2012-06-18T11:09:15.317 に答える
2

上記の@LadislavMrnkaの回答に加えて、エンティティフレームワークのデフォルトの規則の詳細なリファレンスをここで見つけることができます:http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions( v = vs.103).aspx

于 2014-02-17T21:11:40.643 に答える