0

Entity Framework 4.3のMVC3のコードファーストモデルには、次のクラスがあります。

public class Film
{
    public Int32 ID { get; set; }

    [Column("FilmName"), MinLength(2), MaxLength(100)]
    [Required(ErrorMessage = "Please enter a name")]
    public String Name { get; set; }

    public Model.Cast Cast { get; set; }
}

public class Actor
{
    public Int32 ID { get; set; }

    [MaxLength(75)]
    public String Name { get; set; }
}

[Table("Cast")]
public class Cast
{
    public Actor Actor { get; set; }

    [MaxLength(500)]
    public String Role { get; set; }

    public virtual Film Film { get; set; }
}

結果として次のようなテーブルレイアウトが必要です。

Films:
ID PK
Name

Cast:
FilmID PK FK
ActorID PK FK
Role

Actors:
ID PK
Name

Castテーブルを作成するにはどうすればよいですか?現在、次のエラーが発生します。

## System.Data.Entity.Edm.EdmEntityType::EntityType'キャスト'にはキーが定義されていません。このEntityTypeのキーを定義します。\ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet'Casts'は、キーが定義されていないタイプ'Cast'に基づいています。##

しかし、IDキーを作成したくはありません。フィルムとアクターのIDフィールドを使用して、他のテーブルへの外部キーである複合主キーを作成したいと思います。

私は何をすべきか?

4

2 に答える 2

0

私は以前にこれを試みましたが成功しませんでした。私の解決策は、独自のID PKを持つ通常のエンティティのようにリンクテーブルをマップし、DatabaseInitializerをカスタマイズしてDDLスクリプトを実行し、FKの一意のインデックスを作成することでした。EFは、この種のレガシーマッピングをサポートするように設計されていなかったと思います。

于 2012-05-22T18:41:01.280 に答える
0

次のようにモデルを再定義する必要があります。

public class Film
{
    public Int32 ID { get; set; }

    [Column("FilmName"), MinLength(2), MaxLength(100)]
    [Required(ErrorMessage = "Please enter a name")]
    public String Name { get; set; }

    public ICollection<Model.Cast> Cast { get; set; }
}

public class Actor
{
    public Int32 ID { get; set; }

    [MaxLength(75)]
    public String Name { get; set; }


    public ICollection<Model.Cast> Cast { get; set; }
}

[Table("Cast")]
public class Cast
{
    [Key, Column(Order = 0)]
    public int ActorId { get; set; }
    [Key, Column(Order = 1)]
    public int FilmId { get; set; }

    [MaxLength(500)]
    public String Role { get; set; }

    [ForeignKey("ActorId")]
    public Actor Actor { get; set; }
    [ForeignKey("FilmId")]
    public virtual Film Film { get; set; }
}
于 2012-05-23T08:19:10.617 に答える