2014-12-04 43 views
0

了我的下一個類:唯一索引從其他實體

public class Y_Equipment 
{ 
    [MaxLength(150)] 
    public string CategoryDisplayName{get;set;} 
    [MaxLength(150)] 
    [Key] 
    [Index("IX_Y_Equipment",2, IsUnique = true)] 
    public string CategoryCode{get;set;} 
    [MaxLength(150)] 
    public string EquipmentDisplayName{get;set;} 
    [MaxLength(150)] 
    [Index("IX_Y_Equipment",3, IsUnique = true)]   
    public string EquipmentCode{get;set;} 
    public Int32 Timespamp{get;set;} 

    [Index("IX_Y_Equipment", 1, IsUnique = true)] 
    public virtual Y_Unit Unit { get; set; } 
} 

public class Y_Unit : Item 
{ 
    [DefaultValue("")] 
    [MaxLength(10)] 
    public string Flag { get; set; } 
    [DefaultValue("")] 
    [MaxLength(100)] 
    public string UnitSubType { get; set; } 
    [DefaultValue("")] 
    [MaxLength(100)] 
    public string UnitSubTypeID { get; set; } 
    [DefaultValue("")] 
    [MaxLength(100)] 
    public string Category { get; set; } 
} 

public abstract class Item 
{ 
    [MaxLength(150)] 
    public string Name{get;set;} 
    [Index("IX_EntityCode",1,IsUnique = true)] 
    [MaxLength(15)] 
    [Key] 
    public string Code{get;set;} 
} 

而且我的問題是下一個: 我想有Y_Equipments 3項指標唯一鍵和組合的1個部分應該是外鍵形式Y_Unit [code](3le元素組合不能重複)。

IE:

  • 'CAT1', 'Equip1', '1單元',
  • 'CAT1', 'Equip1', 'UNIT2'
  • 'CAT1', 'Equip2',」 UNIT2'

但不

  • 'CAT1', 'Equip1', '1單元' 再次

而是我得到類似

CreateIndex("dbo.Y_Equipment", new[] { "CategoryCode", "EquipmentCode" }, unique: true, name: "IX_Y_Equipment"); 
CreateIndex("dbo.Y_Equipment", "Unit_Code"); 

,這是沒有我想要什麼...任何提示如何正確地更新我的實體?謝謝。

+0

我不認爲你可以添加索引導航屬性。嘗試將'UnitID'外鍵添加到'Y_Equipment'類並將屬性添加到該類。 – Colin 2014-12-05 11:15:22

回答

0

好的, 今天我留下來了解更多關於EF的信息,並找到了一種方法來做到這一點。

我的結果,當我的腳本創建索引:

/****** Object: Index [IX_Y_Equipment] Script Date: 12/5/2014 10:26:10 PM ******/ 
CREATE UNIQUE NONCLUSTERED INDEX [IX_Y_Equipment] ON [dbo].[YB_Equipment] 
(
    [Unit_Code] ASC, 
    [CategoryCode] ASC, 
    [EquipmentCode] 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 

我怎麼做的?我自己加的外鍵,並將其映射到指數,現在我的課的樣子:

public class Y_Equipment 
{ 
    [MaxLength(150)] 
    public string CategoryDisplayName { get; set; } 
    [MaxLength(150)] 
    [Key] 
    [Index("IX_Y_Equipment", 2, IsUnique = true)] 
    public string CategoryCode { get; set; } 
    [MaxLength(150)] 
    public string EquipmentDisplayName { get; set; } 
    [MaxLength(150)] 
    [Index("IX_Y_Equipment", 3, IsUnique = true)] 
    public string EquipmentCode { get; set; } 
    public Int32 Timespamp { get; set; } 

    [Index("IX_Y_Equipment", 1, IsUnique = true)] 
    [ForeignKey("Unit")] 
    [MaxLength(15)] 
    public string Unit_Code { get; set; } 

    public virtual Y_Unit Unit { get; set; } 
} 

這正是我想要的。我想對@Colin說聲謝謝,因爲他在遊戲中暗示我該怎麼做。