传统的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。如何设置它以访问外键?
答案 0 :(得分:0)
这不是一对一的关系。在一对一关系中,外键必须是主键。在这个例子中不是这种情况。这是一对多,但我认为我的应用程序将负责确保只有一个关联。
EF可以使用独立协会处理。它将创建隐藏在POCO类中的外键。可以像我一样使用MapKey指定列的名称。但是,因为我还创建了一个名为IngredientID的属性,就像MapKey使用的列一样,EF有一个问题,因为两个属性被映射到同一列。
所以在EF中这样的事情是可能的,但你不能再使用外键了。