我開發一個實體框架6.1.3代碼優先庫,C#和.NET Framework 4.5.1當列不是主要的。與E.F.碼首先一到零或一的關係鍵
我有一個一到零或一對一的關係問題(或者也許是另一種關係)。
我有兩個表,Codes
和HelperCodes
,代碼可以有零個或一個幫助代碼。這是SQL腳本來創建這兩個表和它們之間的關係:
CREATE TABLE [dbo].[Code]
(
[Id] NVARCHAR(20) NOT NULL,
[Level] TINYINT NOT NULL,
[CommissioningFlag] TINYINT NOT NULL,
[SentToRanger] BIT NOT NULL DEFAULT 0,
[LastChange] NVARCHAR(50) NOT NULL,
[UserName] NVARCHAR(50) NOT NULL,
[Source] NVARCHAR(50) NOT NULL,
[Reason] NVARCHAR(200) NULL,
[HelperCodeId] NVARCHAR(20) NULL,
CONSTRAINT [PK_Code] PRIMARY KEY CLUSTERED
(
[Id] ASC
),
CONSTRAINT [FK_Code_LevelConfiguration]
FOREIGN KEY ([Level])
REFERENCES [dbo].[LevelConfiguration] ([Level]),
CONSTRAINT [FK_Code_HelperCode]
FOREIGN KEY ([HelperCodeId])
REFERENCES [dbo].[HelperCode] ([HelperCodeId])
)
CREATE TABLE [dbo].[HelperCode]
(
[HelperCodeId] NVARCHAR(20) NOT NULL,
[Level] TINYINT NOT NULL,
[CommissioningFlag] TINYINT NOT NULL,
[LastChange] NVARCHAR(50) NOT NULL,
CONSTRAINT [PK_HelperCode] PRIMARY KEY CLUSTERED
(
[Id] ASC
),
CONSTRAINT [FK_HelperCode_LevelConfiguration]
FOREIGN KEY ([Level])
REFERENCES [dbo].[LevelConfiguration] ([Level])
)
但是,當我嘗試做相同的實體框架不這樣做。我的問題是在密碼和幫助代碼中。
這是我的實體框架代碼優先代碼:
public class Code
{
public string Id { get; set; }
public byte Level { get; set; }
// omitted for brevity
public string HelperCodeId { get; set; }
public virtual HelperCode HelperCode { get; set; }
}
class CodeConfiguration : EntityTypeConfiguration<Code>
{
public CodeConfiguration()
{
HasKey(c => c.Id);
Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(c => c.Id)
.HasMaxLength(20);
// omitted for brevity
Property(c => c.HelperCodeId)
.HasMaxLength(20)
.IsOptional();
HasOptional(c => c.HelperCode)
.WithRequired(hc => hc.Code);
}
}
public class HelperCode
{
public string HelperCodeId { get; set; }
public byte Level { get; set; }
public byte CommissioningFlag { get; set; }
public string LastChange { get; set; }
public virtual Code Code { get; set; }
}
class HelperCodeConfiguration : EntityTypeConfiguration<HelperCode>
{
public HelperCodeConfiguration()
{
HasKey(h => h.HelperCodeId);
Property(h => h.HelperCodeId)
.HasMaxLength(20);
Property(h => h.Level)
.IsRequired();
Property(h => h.CommissioningFlag)
.IsRequired();
Property(h => h.LastChange)
.IsOptional()
.HasMaxLength(50);
}
}
這個實體的Code First代碼使用HelperCodes.HelperCodeId
引用Codes.Id
HelperCodes
表生成的外鍵。
實體框架只允許這種關係如果兩個表具有相同的主鍵。
有關如何解決此E.F.錯誤任何想法?
'.WithRequired()'沒有'.HasForeignKey()'。 – VansFannel