2017-05-07 44 views
1

我是ASP.Net MVC的新手,我想更好地理解ASP.Net MVC。我做了一些教程,并在这些教程中制作了一些模型。有一个问题一直在我脑海中浮出水面:我什么时候可以使用public int Id { get; set; },我什么时候可以使用public int MyClassNameId { get; set; }来替代我的模型类的标识符?如果我使用自定义属性名称而不是缺省的Id名称作为模型类的标识符,这会影响吗?ASP.Net MVC模型类的关键标识符

例如,为什么我会用public int ArtistId { get; set; }public int Id { get; set; }

public class Artist 
{ 
    public int ArtistId { get; set; } 
    public string Name { get; set; } 
} 

就那么它匹配另一个类的属性名称,它会被用来作为外键?

回答

2

实体框架CodeFirst默认情况下按名称识别该键。有效名称是Id<YourClassName>Id

你的财产应该命名为IdAccountTypesId

另一种方法是使用ModelBuilder指定的关键。

样品

public class MyDbContext : DbContext 
{ 
    public DbSet<Artists> Artists{ get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Artists>.HasKey(x => x.ArtistId); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

更多关于它,你可以找到here

+0

是的,这我明白。但我的问题是要理解为什么要使用第一个而不是后者作为该属性的标识符名称。 – Barrosy

+0

@Barrosy在创建模型时Entity Framework的Core正在寻找名称为Id或 Id的属性或字段,这只是一个约定。 –

+0

我知道,但我的问题是为什么要使用 ID *而不是ID? – Barrosy

0

如果您使用自定义属性名称,那么编译器将无法理解它的含义,即它是一个ID并且必须用作数据库表中的主键。 当你命名它的编译器理解它的含义。

0

这取决于是否不使用实体框架来建立你的数据库。如果您是Entity Framework,则会查找特定属性名称以标识为主键。

例如,假设您有一个名为Book的模型。

public class Book 
{ 
public string Title {get; set;} 
//all other properties here 
} 

当Entity Framework尝试设置数据库时,它会查找可识别为与特定模型对应的主键的属性。在这种情况下,EF会查找“BookID”作为主键。所以如果你想拥有一个可访问的主键属性,你可以像这样设置它。

public class Book 
{ 
public int BookID {get;set;} 
public string Title {get; set;} 
//all other properties here 
} 

如果你想设置一个不叫“的BookID”主键,你可以使用数据注释:

public class Book 
{ 
[Key] 
public int BookIdentifier{get;set;} 
public string Title {get; set;} 
//all other properties here 
}