0

我在 MVC3 的实体框架 4.3 代码优先模型中有以下类:

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 'Cast' 没有定义键。定义此 EntityType 的键。\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'Casts' 基于没有定义键的类型'Cast'。##

但是我不想创建 ID 键,我想使用 Film 和 Actor 的 ID 字段来制作复合主键,它们都是其他表的外键。

我应该怎么办?

4

2 回答 2

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 回答
0

我以前尝试过这样做,但没有成功。我的解决方案是像普通实体一样使用自己的身份 PK 映射链接表,并自定义 DatabaseInitializer 以运行 DDL 脚本来为 FK 创建唯一索引。我猜 EF 的设计不是为了支持这种遗留映射。

于 2012-05-22T18:41:01.280 回答