我在Entity Framework中使用DatabaseFirst方法,我收到错误:
该表没有定义主键。
现在,当我是控制器的脚手架时,它正在给我
一个或多个实体有验证错误
必须因为EF错误在这里有效。
之前,当它给我主键错误时,我在表StudentAddress
&中添加了列。 StudentCourse
并使Primary KEY
只是为了摆脱上述错误。但添加的列不会反映在我的图表(* .edmx)中,尽管在DB中反映回来。
数据库脚本是:
create table [Standard](
StandardID int constraint pk_standard primary key,
StandardName varchar(255),
[Description] varchar(255)
);
create table Teacher(
TeacherID int constraint pk_teacher primary key,
TeacherName varchar(255),
StandardID int constraint fk_teacher foreign key references [Standard](StandardID) ,
TeacherType varchar(255)
);
create table Course(
CourseID int constraint pk_course primary key,
CourseName varchar(255),
Location varchar(255),
TeacherID int constraint fk_course foreign key references Teacher(TeacherID) ,
);
create table Student(
StudentID int constraint pk_student primary key,
StudentName varchar(255),
StandardID int constraint fk_student foreign key references [Standard](StandardID) ,
);
create table StudentAddress(
[Id] int constraint pk_SA primary key,
StudentID int constraint fk_studentaddr foreign key references Student(StudentID) not null,
Addr1 varchar(255),
Addr2 varchar(255),
City varchar (50),
[State] varchar (50)
);
create table StudentCourse(
[Index Number] int constraint pk_SC primary key,
StudentID int constraint fk1_studentcourse foreign key references Student(StudentID) not null,
CourseID int constraint fk2_studentcourse foreign key references Course(CourseID) not null,
);
PS:使用WebApi2和EF(用于数据)创建WebApp。
答案 0 :(得分:1)
我敢打赌你没有在原始模型中定义StudentAddress
和StudentCourse
的主键。现在,通过向其添加列,您可以显着更改模型的特征。
我认为这是你想要的:
create table StudentAddress(
StudentID int constraint fk_studentaddr foreign key references Student(StudentID) not null,
Addr1 varchar(255),
Addr2 varchar(255),
City varchar (50),
[State] varchar (50),
constraint pk_SA primary key (StudentID) -- primary key
);
create table StudentCourse(
StudentID int constraint fk1_studentcourse foreign key references Student(StudentID) not null,
CourseID int constraint fk2_studentcourse foreign key references Course(CourseID) not null,
constraint pk_SC primary key (StudentID, CourseID) -- composite primary key
);
这会使Student-StudentAddress
成为1:1
关联,Student-StudentCourse
成为n:m
关联。因此,Student-StudentCourse
可以隐藏在类模型中。
因此,您只应添加主键约束而不是列。
以下是添加列的后果:
通过将另一列添加为StudentAddress
的主键,关联Student-StudentAddress
将变为1:n
关联(因为StudentAddress.StudentID
现在可以重复)。
使用额外的Index Number
列,Student-StudentCourse
仍然是n:m
关联,但它不能再隐藏在类模型中,因为只有在联结表时才可以只包含两个包含主键的外键。
我会从适合您的模型上创建一个新的edmx。使用修改后的主键刷新模型可能效果不佳。
这是修改后edmx的样子:
答案 1 :(得分:0)
您应该更新模型类。
在Models文件夹中,打开* .edmx文件以显示模型图,右键单击设计图面上的任意位置,然后选择从数据库更新模型。
了解更多信息: http://www.asp.net/mvc/overview/getting-started/database-first-development/changing-the-database