【发布时间】:2018-04-20 09:02:28
【问题描述】:
我在 SQL Server 中有 3 个表。我想首先在实体框架上使用代码,并且我想互相导航这些表。如您所见,KioskBatch 有一个复合键,并且两个复合键之一同时作为外键,但是当尝试插入时,我收到此错误:
“KioskId”属性无法配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的 getter 和 setter。对于集合属性,该类型必须实现 ICollection,其中 T 是有效的实体类型。
代码:
[Table("tblKiosk")]
public class Kiosk
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("Id")]
public int KioskId { get; set; }
}
[Table("tblCompletionStatus")]
public class CompletionStatus
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Status { get; set; }
}
[Table("tblKioskBatch")]
public class KioskBatch
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int KioskBatchId { get; set; }
public int KioskId { get; set; }
[Key,ForeignKey("KioskId")]
public virtual Kiosk Kiosk { get; set; }
[ForeignKey("CompletionStatus"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? CompletionStatusId { get; set; }
public virtual CompletionStatus CompletionStatus { get; set; }
}
CREATE TABLE [dbo].[tblKiosk]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_tblKiosk]
PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tblKioskBatch]
(
[KioskBatchId] [int] NOT NULL,
[KioskId] [int] NOT NULL,
[CompletionStatusId] [int] NULL,
CONSTRAINT [PK_tblKioskBatch]
PRIMARY KEY CLUSTERED ([KioskBatchId] ASC, [KioskId] ASC)
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblKioskBatch] WITH CHECK
ADD CONSTRAINT [FK_tblKioskBatch_tblCompletionStatus]
FOREIGN KEY([CompletionStatusId]) REFERENCES [dbo].[tblCompletionStatus] ([Id])
GO
ALTER TABLE [dbo].[tblKioskBatch] CHECK CONSTRAINT [FK_tblKioskBatch_tblCompletionStatus]
GO
ALTER TABLE [dbo].[tblKioskBatch] WITH CHECK
ADD CONSTRAINT [FK_tblKioskBatch_tblKiosk]
FOREIGN KEY([KioskId]) REFERENCES [dbo].[tblKiosk] ([Id])
GO
ALTER TABLE [dbo].[tblKioskBatch] CHECK CONSTRAINT [FK_tblKioskBatch_tblKiosk]
GO
CREATE TABLE [dbo].[tblCompletionStatus]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_TblCompletionStatus]
PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
【问题讨论】:
-
引用属性不能用作键。
标签: c# sql-server entity-framework ef-code-first