2014-12-29 15 views
31

Tôi đang sử dụng mã Entity Framework 6.1 đầu tiên và mô hình miền của tôi bên dưới.Tạo chỉ mục chuỗi bằng Mã số

class Item 
{ 
    [Index] 
    public string CreatedBy { set; get; } 
} 

Khi tôi sử dụng cơ sở dữ liệu cập nhật để di chuyển, tôi nhận được lỗi sau. Tuy nhiên, theo như tôi nghiên cứu, [Index] sẽ hoạt động như chú thích đến string.

Cột 'CreatedBy' trong bảng 'dbo.Items' thuộc loại không hợp lệ để sử dụng làm cột khóa trong chỉ mục.

Trả lời

68

Thông thường, bạn nhận được lỗi này khi bạn sử dụng một VARCHAR (Max) hãy thử sử dụng:

[Column(TypeName = "VARCHAR")] 
[StringLength(n)] 
[Index] 
public string CreatedBy { set; get; } 

trong đó n là từ 1 đến 450.

+0

Đã hoạt động !!! cảm ơn. – DarthVader

+0

Tại sao thuộc tính '[Cột (TypeName =" VARCHAR ")]'? – Zero3

+0

@ Zero3 nvarchar là unicode (2bytes/char), và varchar không phải là (1byte/char). Vì vậy, trong trường hợp lĩnh vực của bạn không yêu cầu ngôn ngữ khác nhau (codepages), bạn có thể có hai lần không gian. –

4

Nếu bạn sử dụng EntityTypeConfiguration aka ánh xạ:

public class MyPocoEntitiyTypeConfig<T> : EntityTypeConfiguration<T> where T:class 
{ 

} 

public class MyPocoEnt 
{ 
    public virtual string MyProp { get; set; } 
} 

public class MyPocoEntMapping : MyPocoEntitiyTypeConfig<MyPocoEnt> 
{ 
    public MyPocoEntMapping() 
    { 
      Property(x => x.MyProp).HasMaxLength(300); 
      Property(x => x.MyProp).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("MyProp") { IsUnique = true })); 
     } 
    } 
} 
Các vấn đề liên quan