Entity framework 实体框架/MVC4-与多列键的关系

Entity framework 实体框架/MVC4-与多列键的关系,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我是EF的新手,我很难确定如何在我的主表投资者之间建立关系,包括联系信息,以及每个投资者可以有多张票据的表票据。以下是模型: public class Investor { public int Id { get; set; } public string Name { get; set; } public string Company { get; set; } public string Email { get; set; } public strin

我是EF的新手,我很难确定如何在我的主表投资者之间建立关系,包括联系信息,以及每个投资者可以有多张票据的表票据。以下是模型:

public class Investor
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Company { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string Cell { get; set; }
    public string Fax { get; set; }
    [Display(Name="Address 1")]
    public string Address1 { get; set; }
    [Display(Name = "Address 2")]
    public string Address2 { get; set; }
    public string City { get; set; }
    [StringLength(2, ErrorMessage = "State must be 2 characters")]
    public string State { get; set; }
    public string Zip { get; set; }
    public string ContactTableId { get; set; }
    [ForeignKey("ContactTableId, ContactId")]
    public virtual List<Note> Notes { get; set; }
}

public class Note
{
    [Key]
    [Column(Order = 0)]
    public string ContactTableId { get; set; }
    [Key]
    [Column(Order = 1)]
    public int? ContactId { get; set; }
    public string note { get; set; }
    public DateTime? DateCreated { get; set; }
}

在控制器中。如何设置此项以使其自动提取票据。

外键不是“ContactTableId,ContactId”,而是表
票据中的单个字段
投资者Id
(或票据)。EF认为您试图将单个键映射到两个字段,并生成这条有点难以捉摸的异常消息。但是只要删除
ForeignKey
属性,EF就会使用
Note

中的外键字段。好的,我取出了外键部分,现在在视图中的以下代码中:@foreach(var p in Model.Notes){if(@p.Note!=null){@p.DateCreated-@p.note

}我收到错误“无效列名'Investor_Id'”(3次)。某些连接不正确。嗯,该列当然应该在数据库中。如果不是,您应该添加它或告诉EF FK字段的正确名称。Investor中的Id转到Notes中的ContactId,Investor中的ContactTableId转到Notes中的ContactTableId。我已去掉外键属性,那么如何告诉EF how映射键。我认为这是可能的,但不,在EF中,您必须将外键映射到主键。因此,您不能在注释中没有
Investor\u Id
。无论如何,这是更好的规范化,因为
ContactTableId
只存储在
Investor
中。好的,问题是我还有其他几个表/模型要使用带便条。这就是为什么我在那里有ContactTableId,来告诉它与哪个表相关联。例如,有一个Sellers表。因此,对于所有的表,必须有一个Investor\u Id,Sellers\u Id等等,这看起来很尴尬。当然,有一个更简单的方法。
public ActionResult Index()
{
    return View(db.Investors.ToList());
}