我正在尝试在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类之间的关系会是什么样的?
任何代码示例都将受到赞赏。
答案 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)
只需News
和Status
。你会写一些类似的东西:
modelBuilder.Entity<News>()
.HasMany(n => n.Statuses)
.WithMany(s => s.News);
(根据自己的喜好调整复数。)