Entity framework 如何保存ICollection<;int>;使用EF CTP5

Entity framework 如何保存ICollection<;int>;使用EF CTP5,entity-framework,ef-code-first,entity-framework-4.1,Entity Framework,Ef Code First,Entity Framework 4.1,我的类有以下属性:团队 [Key] public virtual long Id { get; set; } public Guid ClubIdentifier { get; set; } public GenderEnum Gender { get; set; } public TeamAgeCategoryEnum TeamAgeCategory { get; set; } public ICollection<int> BirthYears { get; set; } [

我的类有以下属性:团队

[Key]
public virtual long Id { get; set; }

public Guid ClubIdentifier { get; set; }
public GenderEnum Gender { get; set; }
public TeamAgeCategoryEnum TeamAgeCategory { get; set; }
public ICollection<int> BirthYears { get; set; }
[Key]
公共虚拟长Id{get;set;}
公共Guid俱乐部标识符{get;set;}
公共GenderEnum性别{get;set;}
public TeamAgeCategoryEnum TeamAgeCategory{get;set;}
公共ICollection生日{get;set;}
如何将财产生日中的内容保存到我的数据库中,我让EF根据模型创建我的数据库,但财产生日被遗漏在我的数据库中。我本来希望有一个新表,其中包含int值和我的团队Id值


我错过了什么,我想我需要在我的repository类中的ModelCreating方法上做些什么。

如果您查看
EntityTypeConfiguration
类,您将看到以下用于定义一对多关系的签名(这是
团队
生日
之间的关系):

。。。然后在班级团队的集合中使用:

public ICollection<BirthYear> BirthYears { get; set; }
这将自动启用级联删除-删除团队时,关联的生日将从数据库中删除

编辑2

(同样基于Ladislav的评论)如果你不想复制生日表中的年份,你也可以建立多对多关系:

modelBuilder.Entity<Team>()
            .HasMany(t => t.BirthYears)
            .WithMany();
modelBuilder.Entity()
.HasMany(t=>t.生日)
.有许多();

这将在
Team
BirthYear
之间向数据库中添加一个联接表(
TeamBirthYears
)。从存储空间或性能的角度来看,您可能不会赢得任何东西(因为
BirthYear
类非常小,
BirthYear
表中的记录与联接表中的记录大小相同)。但是,如果您想通过附加属性来扩展
BirthYear
类,那么这可能是一种更好的方法。否则,我个人会保持简单的一对多关系。但选择权归你。

这将引发异常<代码>出生年份必须具有另一个将用作PK的属性。另外,一旦您将
出生年份
暴露为单独的实体关系,则很可能会变成多对多关系,或者出生年份会重复。@Ladislav:是的,这是一个过于草率的回答,谢谢您的提示!我现在已经改正了。但你的意思是什么时候会发生多对多的关系?我现在做了一个小测试,它似乎是一对多的关系-没有上面的流畅代码和此代码所需的可选代码。它是一对多的,但如果我理解这个场景,它可能是多对多的,因为否则你可以在出生年份有许多相同值的记录。现在我明白了。另一方面,我们将在出生年份表中保存的内容将需要在联接表中保存。但是我要把这个作为另一个选项添加到答案中。谢谢…,好吧,我想我必须创建我的生日班,然后让它工作。
public ICollection<BirthYear> BirthYears { get; set; }
modelBuilder.Entity<Team>()
            .HasMany(t => t.BirthYears)
            .WithRequired();
modelBuilder.Entity<Team>()
            .HasMany(t => t.BirthYears)
            .WithMany();