2012-06-08 92 views
1

我不能为我的生活得到两个单独的表来保存关系和两个标识列。我不断收到像ReferentialConstraint中依赖属性映射到商店生成列的错误。列:'OlsTerminalId'。我无法想象这个设置是不正常的。实体框架1:1关系标识列

[DataContract] 
    public class OlsData { 
     private static readonly DateTime theUnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int OlsDataId { get; set; } 

    [DataMember(Name = "id")] 
    public int Id { get; set; } 

    public DateTime Timestamp { get; set; } 

    [DataMember(Name = "created")] 
    [NotMapped] 
    public double Created { 
     get { return (Timestamp - theUnixEpoch).TotalMilliseconds; } 
     set { Timestamp = theUnixEpoch.AddMilliseconds(value); } 
    } 

    [InverseProperty("OlsData")] 
    [DataMember(Name = "terminal")] 
    public virtual OlsTerminal OlsTerminal { get; set; } 
} 

[DataContract] 
public class OlsTerminal { 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int OlsTerminalId { get; set; } 

    public int OlsDataId { get; set; } 

    [DataMember(Name = "account")] 
    [NotMapped] 
    public virtual OlsAccount OlsAccount { get; set; } 

    [DataMember(Name = "terminalId")] 
    public string TerminalId { get; set; } 

    [DataMember(Name = "merchantId")] 
    public string MerchantId { get; set; } 

    public virtual OlsData OlsData { get; set; } 
} 

public class OlsDataContext : DbContext { 
     protected override void OnModelCreating(DbModelBuilder aModelBuilder) { 
      aModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 

     public OlsDataContext(string aConnectionString) : base(aConnectionString) {} 
     public DbSet<OlsData> OlsData { get; set; } 
     public DbSet<OlsTerminal> OlsTerminal { get; set; } 
     public DbSet<OlsAccount> OlsAccount { get; set; } 

    } 

回答

0

这是因为EF中的1:1关系总是建立在主键上。所以FK在OlsTerminal表必须按OlsTerminalId和FK不能自动生成 - 它必须是从​​PK的值。

它必须以这种方式完成的原因是要求独立实体中FK值的唯一性构建实数1:1而不是1:N。 EF不支持唯一的约束/候选键,因此如何强制唯一性的唯一方法是在依赖实体的PK上使用FK。