0

传统的 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);

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

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

4

1 回答 1

0

这不是一对一的关系。在一对一关系中,外键必须是主键。在此示例中不是这种情况。这是一对多的,但我假设我的应用程序会确保只有一个关联。

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

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

于 2013-04-30T19:56:31.113 回答