【发布时间】:2012-04-14 14:52:20
【问题描述】:
我有四个实体,我想通过 code first fluent api 将它们转换为数据库表(我正在使用在 databaseanswers.org 找到的模型),但我不确定如何。我遇到的问题是 SuggestedMenuId 正在一个复合键(MenuCourse 和 CourseRecipeChoice)中的两个不同表之间迁移。
这是我收到的消息:
“在模型生成过程中检测到一个或多个验证错误:
\tSystem.Data.Entity.Edm.EdmAssociationConstraint: : 关系约束中的从属角色和主体角色中的属性数量必须相同。"
这是我在我的 EntityTypeConfiguration 类中尝试过的,它显然是不正确的......
public class CourseRecipeChoiceConfiguration : EntityTypeConfiguration<CourseRecipeChoice>
{
public CourseRecipeChoiceConfiguration()
{
HasKey(crc => new { crc.Id});
HasRequired(r => r.Recipe).WithMany(crc => crc.CourseRecipeChoices).HasForeignKey(crc => crc.RecipeId);
HasRequired(m => m.MenuCourse).WithMany(crc => crc.CourseRecipeChoices).HasForeignKey(crc => crc.MenuCourseId);
HasRequired(m => m.MenuCourse).WithMany(crc => crc.CourseRecipeChoices).HasForeignKey(crc => crc.SuggestedMenu_MenuCourseId);
}
}
CourseRecipeChoice 连接表的导航属性和流畅 api 语法的正确语法是什么?
public class SuggestedMenu
{
public int SuggestedMenuId { get; set; }
public virtual ICollection<MenuCourse> MenuCourses { get; set; }
}
public class MenuCourse
{
public int Id { get; set; }
public int SuggestedMenuId { get; set; }
public SuggestedMenu SuggestedMenu { get; set; }
public virtual ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; }
}
public class CourseRecipeChoice
{
public int SuggestedMenuId { get; set; }
public int MenuCourseId { get; set; }
public int Id { get; set; }
public int RecipeId { get; set; }
//How do I represent the navigation properties in this class?
}
public class Recipe
{
public int RecipeId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<CourseRecipeChoice> CourseRecipeChoices { get; set; }
}
关键如下:
- SuggestedMenu(Id)
- MenuCourse(Id, SuggestedMenuId)
- CourseRecipeChoice(Id, SuggestedMenuId, MenuCourseId, RecipeId) //这实际上是我感到困惑的地方,因为根据模型,SuggestedMenuId 是 SuggestedMenu 中的 PK 和 MenuCourse 和 CourseRecipeChoice 中的 PF(这可能只是糟糕的设计?)
- 食谱(RecipeId)
【问题讨论】:
-
你能告诉我每个表的键是什么,外键是什么,我猜但不确定。我认为应该没有更大的问题。
-
@NSGaga 我还没有阅读您的回复,但我确实更新了问题以添加密钥...
标签: entity-framework code-first composite-key jointable