我正在使用Entity Framework 4.3并使用Code Fist.
我上课了
public class User
{
public int UserId{get;set;}
public string UserName{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在创建数据库表时,如何告诉Entity Framework UserName必须是唯一的?如果可能的话,我更愿意使用数据anotations而不是配置文件.
实体框架6.1(代码优先)增加了通过添加索引的可能性IndexAttribute.该属性采用一个参数来指定索引应该是群集还是非群集.
同时,AFAIK,Entity Framework要求每个实体都有一个主键(用该注释KeyAttribute),并且该主键始终作为聚簇键创建.
因此,只要我的申请IndexAttribute有IsClustered = true,我得到一个错误,因为由于键时,已经是一个聚集索引.
那么,如何使用IndexAttribute?创建不是主键的聚簇索引?可用的IsClustered属性是IndexAttribute什么?
(有关更多上下文:我正在映射一个仅用于通过LINQ查询进行读取的表.我不需要实际插入,更新或删除该表中的实体.因此,我不需要主键理想情况下,我想要一个没有主键的表,但是有一个非唯一的聚簇索引,专为阅读而优化.)
编辑(2014-04-11):另请参阅https://entityframework.codeplex.com/workitem/2212.
我初始迁移中的代码如下
Run Code Online (Sandbox Code Playgroud)CreateTable( "dbo.Sites", c => new { Id = c.Int(nullable: false, identity: true), Description = c.String(maxLength: 450) }) .PrimaryKey(t => t.Id);
为了使Description字段是唯一的,我将以下内容添加到UP方法的末尾
CreateIndex("dbo.Sites","Description",唯一:true);
后来我决定要求描述字段.
新迁移会产生以下更改
AlterColumn("dbo.Sites","Description",c => c.String(nullable:false,maxLength:450));
但是,当此更改尝试运行时,我收到错误
ALTER TABLE ALTER COLUMN描述失败,因为一个或多个对象访问此列.
我能够使用分析器隔离SQL行,如
ALTER TABLE [dbo].[Sites] ALTER COLUMN [描述] nvarchar NOT NULL
当我在Management Studio中运行它时,会出现以下错误
消息5074,级别16,状态1,行1索引'IX_Description'取决于列'描述'.消息4922,级别16,状态9,行1 ALTER TABLE ALTER COLUMN描述失败,因为一个或多个对象访问此列.
如何获取迁移代码以删除索引,然后更改更改列,然后重新构建索引?
我正在使用SQL Server 2008 R2
我有两个班级联系人和小组
组合FirstName和LastName必须是唯一的,可以为单个联系人添加多个地址.我如何才能在实体框架代码第一种方法中做到这一点?
public class Contacts
{
[Key]
public int ContactID { get; set; }
[ForeignKey("Group")]
public int GroupID { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Address { get; set; }
[Required]
public string Number { get; set; }
[Required]
[EmailAddress]
public string EmailId { get; set; }
[DataType(DataType.Date)]
public DateTime CreateDate { get; set; }
public DateTime? ModifiedDate { get; …Run Code Online (Sandbox Code Playgroud)