C# Net MVC模型类密钥标识符
我是ASP.NETMVC新手,我正在努力更好地理解ASP.NETMVC。我做了一些教程,并在这些教程中制作了一些模型。我脑海中不断浮现的一个问题是:我什么时候会使用C# Net MVC模型类密钥标识符,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我是ASP.NETMVC新手,我正在努力更好地理解ASP.NETMVC。我做了一些教程,并在这些教程中制作了一些模型。我脑海中不断浮现的一个问题是:我什么时候会使用public int-Id{get;set;}以及什么时候会使用public int-MyClassNameId{get;set;}作为模型类的标识符?对于模型类的标识符,如果使用自定义属性名称而不是默认的Id名称,这是否重要 例如,为什么我要使用public int-ArtistId{get;set;}覆盖public int-Id
public int-Id{get;set;}
以及什么时候会使用public int-MyClassNameId{get;set;}
作为模型类的标识符?对于模型类的标识符,如果使用自定义属性名称而不是默认的Id
名称,这是否重要
例如,为什么我要使用public int-ArtistId{get;set;}
覆盖public int-Id{get;set;}
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
它是否与另一个类中的属性名匹配,该属性名将在该类中用作外键?如果使用自定义属性名,编译器将无法理解它是一个id,并且必须用作数据库表中的主键。
当您命名它时,id编译器理解它的含义。实体框架代码首先根据名称识别密钥。有效名称为
Id
或Id
您的属性应命名为Id
或AccountTypesId
另一种方法是使用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);
}
}
公共类MyDbContext:DbContext
{
公共数据库集这取决于是否使用实体框架来设置数据库。如果您是,实体框架将查找特定的属性名称以标识为主键
例如,假设您有一个名为Book的模型
public class Book
{
public string Title {get; set;}
//all other properties here
}
当实体框架试图设置数据库时,它会查找一个属性,该属性可以标识为与特定模型相对应的主键。在这种情况下,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
}
是的,我确实理解。但我的问题是理解为什么要使用第一个而不是后一个作为该属性的标识符名称。@Barrosy在创建模型实体框架时的核心是寻找名称Id或Id只是约定的属性或字段。我知道,但我的问题是为什么要使用Id而不是Id?@Barrosy you can使用其中任何一个都没有difference@Barrosy如果将主键用作外键,最好使用Id或modelBuilder,以免与第二个表中名为Id的主键混淆。