实体框架代码的第一类关系

时间:2011-01-27 13:01:22

标签: c# sql sql-server entity-framework ado.net

我正在尝试在Entity Framework中创建我的模型,我正在尝试使用代码优先选项。

我目前在我的数据库中有3个表。我的状态表包含Web应用程序中使用的所有状态。我有一张新闻桌。我有一个新闻状态表。我这样做的原因是因为我不希望所有新闻项目都可用,只有几个。所以我的3个表格看起来像这样:

新闻表:

NewsId int required primary key
Title varchar required
Body varchar required
NewsStatusId int required foreign key

NewStatus表:

NewsStatusId int required primary key
StatusId int required foreign key

状态表

StatusId int required primary key
Name varchar required

为此创建类时,是否需要为News,Status和NewsStatus创建类?我只是想新闻和地位?我的关系在2/3班之间会是什么样子?

我的新闻类看起来像这样

public class News
{
     public int NewsId { get; set; }
     // rest of my properties
     public int StatusId { get; set; }
}

状态类:

public class Status
{
     public int StatusId { get; set; }
     public string Name { get; set; }
}

这些类与2/3类之间的关系会是什么样的?

任何代码示例都将受到赞赏。

2 个答案:

答案 0 :(得分:6)

对于新闻和状态之间的基本多对多关联,您并不需要任何流畅的API。一切都将由Code First基于约定推断。也就是说,我们可以根据您的要求使用流畅的API自定义您的数据库架构。

public class News
{
    public int NewsId { get; set; }
    public string Title { get; set; }

    public ICollection<Status> Statuses { get; set; }
}

public class Status
{
    public int StatusId { get; set; }
    public string Name { get; set; }

    public ICollection<News> Newses { get; set; }
}

public class Ctp5Context : DbContext
{
    public DbSet<News> Newses { get; set; }
    public DbSet<Status> Statuses { get; set; }
}

请注意,在像这样的多对多关联中,新闻类中不会有NewsStatusId作为外键,而是会在链接表上显示一个NewsId外键引用新闻表上的PK。如果你真的需要在News类上有NewsStatusId,那么我们必须将这种关联分解为2个一对多关联,这意味着我们最终有3个实体而不是2个。

答案 1 :(得分:1)

只需NewsStatus。你会写一些类似的东西:

modelBuilder.Entity<News>()
    .HasMany(n => n.Statuses) 
    .WithMany(s => s.News);

(根据自己的喜好调整复数。)