[英]How to create multi-columns “reference” index (join index) in c# model with EF6
[英]C# EF6 index attribute not working
我正在嘗試將兩個字段組合成一個帶有EF6的唯一索引。 但update-database命令不會將“Owner”字段添加到索引中。 我在想它是因為它不是原始類型而是FK,但我不確定如何解決它。
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; }
}
生成的索引:
創建獨特的非集群索引[IX_FundIdentifierAndOwner] ON [dbo]。[Funds]([Identifier] ASC);
創建獨特的非集群索引[IX_FundNameAndOwner] ON [dbo]。[Funds]([Name] ASC);
創建非集群索引[IX_Owner_Id] ON [dbo]。[Funds]([Owner_Id] ASC);
任何幫助是極大的贊賞!
創建導航屬性(引用另一個表)時,應指定要用作外鍵的列名。 如果不這樣做,EF假定它是一個名為Objectname_Id的列。
您可以在sql代碼中看到它調用了您的列[Owner_Id]。 問題是,當您這樣做時,您無法控制該列的數據注釋。
試試這個
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)的列EF按慣例理解該列是屬性所有者。
這是遷移生成的腳本:
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的說明 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.