在使用Code First的EF 6.1中,您可以使用实体中的属性创建索引,或者使用以下行中的流畅API:
Property(x => x.PropertyName)
.IsOptional()
.HasMaxLength(450)
.HasColumnAnnotation("Index",
new IndexAnnotation(new IndexAttribute("IX_IndexName") {IsUnique = true, }));
Run Code Online (Sandbox Code Playgroud)
是否有任何方式WHERE PropertyName IS NOT NULL
可以像在SQL Server中一样以原样的方式表示脚手架(参见:https://stackoverflow.com/a/767702/52026)?
那么现在在最新测试版的Entity Framework 6.1中可以使用索引,是否可以在代码优先方法中创建一个与此SQL语句相同的索引?
CREATE NONCLUSTERED INDEX [Sample1]
ON [dbo].[Logs] ([SampleId],[Date])
INCLUDE ([Value])
Run Code Online (Sandbox Code Playgroud) 我有一个使用实体框架6-代码优先方法的MVC ASP.NET应用程序。
使用Fluent API,如何使用ASC / DESC排序在每列不同的多个列上添加索引?
我已经看到了许多使用多个列的示例,但是没有办法设置索引中列的排序顺序。
Table
-----
Id
Type
DateFor
DateCreated
Value
Run Code Online (Sandbox Code Playgroud)
我要在以下列上建立索引:Type(ASC),DateFor(Desc),DateCreated(Desc)。
indexing entity-framework ef-code-first entity-framework-6 ef-fluent-api
我们有三列的表格,StudentId
并SubjectId
与Active
(和其他一些列,但都没有涉及这个问题).
Active
column指示记录是否处于活动状态(Active
如果有人从UI中删除记录,我们将此列设置为零)
在列索引的定义StudentId
,并SubjectId
为如下:
CREATE UNIQUE NONCLUSTERED INDEX [UQ_StudentSubject_SubjectId_StudentId]
ON [dbo].[StudentSubject]
(
[StudentId] ASC,
[SubjectId] ASC
)WITH(
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
从我们的应用程序,如果我们尝试插入与此相结合的另一个记录SubjectId
和studentId
插入失败和Java抛出以下错误:
引起:com.microsoft.sqlserver.jdbc.SQLServerException:无法在对象'dbo.StudentSubject'中插入具有唯一索引'UQ_StudentSubject_SubjectId_StudentId'的重复键行.重复键值为(113460,182).
组合113460,182的记录的活动为零,因此,我们尝试插入新记录而不是将活动标志设置为1.
如果我们插入一条带有subjectId和studentId的现有组合的新记录,那么我们可以在插入时忽略这个索引Active
吗?
编辑 抱歉混淆,这是一个索引而非约束.