2015-08-21 8 views
5

काम नहीं कर रहा है मैं ईएफ 6 के साथ एक अद्वितीय इंडेक्स में दो फ़ील्ड को गठबंधन करने की कोशिश कर रहा हूं। लेकिन अद्यतन-डेटाबेस कमांड इंडेक्स में 'स्वामी' फ़ील्ड नहीं जोड़ देगा। मैं सोच रहा हूं क्योंकि यह एक आदिम प्रकार नहीं है लेकिन एक एफके है, लेकिन मुझे यकीन है कि इसे कैसे ठीक किया जाए।सी # ईएफ 6 इंडेक्स विशेषता

public class Fund 
{ 
    [Key] 
    public int FundId { get; set; } 

    [Required] 
    [Index("IX_FundNameAndOwner", IsUnique = true, Order = 1)] 
    [Index("IX_FundIdentifierAndOwner", IsUnique = true, Order=1)] 
    public ApplicationUser Owner { get; set; } 


    [Required] 
    [Index("IX_FundNameAndOwner", IsUnique = true, Order=2)] 
    [MaxLength(25)] 
    public string Name { get; set; } 

    [Required] 
    [Index("IX_FundIdentifierAndOwner", IsUnique = true, Order=2)] 
    [MaxLength(25)] 
    public string Identifier { get; set; } 

    public double Balance { get; set; } 
} 

जनरेट किया अनुक्रमित:।

बनाएं अद्वितीय nonclustered अनुक्रमणिका [IX_FundIdentifierAndOwner] पर [dbo] [फंड] ([पहचानकर्ता] एएससी);

अद्वितीय गैर-पंजीकृत इंडेक्स [IX_FundNameAndOwner] ऑन [डीबीओ] बनाएं। [फंड] ([नाम] एएससी);

गैर-सूचीबद्ध इंडेक्स [IX_Owner_Id] ऑन [डीबीओ] बनाएं। [फंड] ([मालिक_आईडी] एएससी);

किसी भी मदद की बहुत सराहना की जाती है!

+0

एप्लिकेशन उपयोगकर्ता परिभाषा कैसे है? आप संबंधितTo विशेषता [संबंधित) (संबंधित प्रॉपर्टी = "फंड", कुंजी = "स्वामी आईडीऑनफंड", संबंधितकी = "स्वामी आईडीऑनप्लिकेशन यूज़र" का उपयोग कर सकते हैं] – Luca

उत्तर

2

जब आप नेविगेशन प्रॉपर्टी (किसी अन्य तालिका का संदर्भ) बनाते हैं तो आपको कॉलम नाम को विदेशी कुंजी के रूप में उपयोग करने के लिए निर्दिष्ट करना चाहिए। यदि आप ऐसा नहीं करते हैं तो ईएफ मानता है कि यह ऑब्जेक्टनाम_आईडी नामक एक कॉलम है।

आप एसक्यूएल कोड में देख सकते हैं जिसे इसे आपके कॉलम [मालिक_आईडी] कहा जाता है। समस्या यह है कि जब आप ऐसा करते हैं तो इस कॉलम के लिए डेटा एनोटेशन पर आपका कोई नियंत्रण नहीं होता है।

इस

public class Fund 
{ 
    [Key] 
    public int FundId { get; set; } 

    [Required] 
    [Index("IX_FundNameAndOwner", IsUnique = true, Order = 1)] 
    [Index("IX_FundIdentifierAndOwner", IsUnique = true, Order = 1)] 
    public int OwnerId { get; set; } // <---- ADD THIS! 

    public virtual ApplicationUser Owner { get; set; } 


    [Required] 
    [Index("IX_FundNameAndOwner", IsUnique = true, Order = 2)] 
    [MaxLength(25)] 
    public string Name { get; set; } 

    [Required] 
    [Index("IX_FundIdentifierAndOwner", IsUnique = true, Order = 2)] 
    [MaxLength(25)] 
    public string Identifier { get; set; } 

    public double Balance { get; set; } 
} 

ObjectId (या Objec_Id) नाम की एक स्तंभ एफई परंपरा है कि स्तंभ संपत्ति के मालिक के लिए है द्वारा समझता जोड़ने का प्रयास करें।

CREATE TABLE [dbo].[Funds] (
    [FundId] [int] NOT NULL IDENTITY, 
    [OwnerId] [int] NOT NULL, 
    [Name] [nvarchar](25) NOT NULL, 
    [Identifier] [nvarchar](25) NOT NULL, 
    [Balance] [float] NOT NULL, 
    CONSTRAINT [PK_dbo.Funds] PRIMARY KEY ([FundId]) 
) 
CREATE UNIQUE INDEX [IX_FundIdentifierAndOwner] ON [dbo].[Funds]([OwnerId], [Identifier]) 
CREATE UNIQUE INDEX [IX_FundNameAndOwner] ON [dbo].[Funds]([OwnerId], [Name]) 

यहाँ डिफ़ॉल्ट Code First Conventions का एक विवरण है:

इस माइग्रेशन द्वारा उत्पन्न स्क्रिप्ट है।

संबंधित मुद्दे