これらはテーブルで、* で終わるフィールドは PK です。Imageテーブルでは、HomeIDまたはCarIDのいずれかが値を持つ必要があり、もう 1 つは null です。これと同様に、Feature
では null ではなく 0 であるため、キーとして使用できます ( this.HasKey
)。しかし、マッピングしようとすると、関連するレコードにそれらが見つかりません。たとえば、Home.Images
0 レコードを返します。
+--------------+ +-----------------+ +------------- --+ +---------------+ +---------------+ |ホーム | |車 | |画像 | |特徴 | |機能タイプ | |---------------| |-----------------| |---------------| |---------------| |---------------| |ホーム ID* | |カーID* | |画像ID* | |FeatureTypeId* | |FeatureTypeId* | |タイトル | |ブランド | |名前 | |ホーム ID* | |名前 | |説明 | |モデル | |URL | |カーID* | | | | | |住所 | |年 | |HomeID(null) | | | | | | | | | | | | | | | | | |CarID (ヌル) | | | | | | | | | +--------------+ +-----------------+ +------------- --+ +---------------+ +---------------+
これらは私のモデルとマッピングのコードです。
public class BaseModel
{
/// <summary>
/// Gets or sets Id
/// </summary>
public int Id { get; set; }
}
public class Home : BaseModel
{
/*All direct fields*/
public List<Image> Images{get; set;}
}
internal class HomeMap : EntityTypeConfiguration<Home>
{
public HomeMap()
{
/* All direct mapping to Properties to ColumnsNames */
// I tried the following 2 lines
//this.HasOptional(p => p.Images).WithRequired().WillCascadeOnDelete(false);
//this.HasOptional(p => p.Images).WithMany().Map(m => m.MapKey("ImageId")).WillCascadeOnDelete(false);
}
}
/* All the same definition and mapping for the others*/
/* ImageMap for the relation*/
/* Image model has a field type `Home` name **Home** */
internal class ImageMap: EntityTypeConfiguration<Image>
{
public ImageMap()
{
/* All direct mapping to Properties to ColumnsNames */
//Currently this is what I am using for the mapping
this.HasOptional(i => i.Home).WithMany(h => h.Images).HasForeignKey(i => i.HomeID).WillCascadeOnDelete(false);
}
}