一对一的可选关系

时间:2013-04-26 22:14:01

标签: entity-framework relationship

传统的EF问题始于:我的模型是

public class Ingredient
{
    public int IngredientID { get; set; }
    public virtual RequestedIngredient RequestedIngredient { get; set; }
    // other stuff
}

public class RequestedIngredient
{
    [Key]
    string BlahBlahBlah { get; set; }
    public int? IngredientID { get; set; }
    public virtual Ingredient Ingredient { get; set; }
}

dbContext中的某处...

        modelBuilder.Entity<Ingredient>()
            .HasOptional<RequestedIngredient>(e => e.RequestedIngredient)
            .WithOptionalPrincipal(e => e.Ingredient)
            .Map(e => e.MapKey("IngredientID"))
            .WillCascadeOnDelete(false);

但我得到的Schema指定无效。错误: (195,6):错误0019:类型中的每个属性名称必须是唯一的。属性名称'IngredientID'已经定义。

如果我从RequestedIngredient中删除IngredientID,将按照我的意愿创建数据库。但我无法访问IngredientID。如何设置它以访问外键?

1 个答案:

答案 0 :(得分:0)

这不是一对一的关系。在一对一关系中,外键必须是主键。在这个例子中不是这种情况。这是一对多,但我认为我的应用程序将负责确保只有一个关联。

EF可以使用独立协会处理。它将创建隐藏在POCO类中的外键。可以像我一样使用MapKey指定列的名称。但是,因为我还创建了一个名为IngredientID的属性,就像MapKey使用的列一样,EF有一个问题,因为两个属性被映射到同一列。

所以在EF中这样的事情是可能的,但你不能再使用外键了。