C# 实体框架一对多关系-命名为Id时如何重命名外键名称?
我正在尝试在asp.net标识表“aspnetusers”和我自己的“application”表之间创建一对多关系。问题是aspnetusers表主键没有名称前缀-它只是名为“Id”。我想为它创建一个名称,比如applicationSerid,这样在使用它进行绑定时就可以避免混淆。我该怎么做C# 实体框架一对多关系-命名为Id时如何重命名外键名称?,c#,asp.net-mvc,entity-framework,code-first,C#,Asp.net Mvc,Entity Framework,Code First,我正在尝试在asp.net标识表“aspnetusers”和我自己的“application”表之间创建一对多关系。问题是aspnetusers表主键没有名称前缀-它只是名为“Id”。我想为它创建一个名称,比如applicationSerid,这样在使用它进行绑定时就可以避免混淆。我该怎么做 public class Application { public int ApplicationId { get; set; } [Required] [DisplayName("Fir
public class Application
{
public int ApplicationId { get; set; }
[Required]
[DisplayName("First Name")]
public string FirstName { get; set; }
[DisplayName("Last Name")]
public string LastName { get; set; }
//**Need the aspnetuser table Id property here for my foreign key and would like to name it ApplicationUserId - how do I do this?
如果您只是将虚拟属性添加到
应用程序
类中,EF应负责在数据库中命名FK,您只需从代码访问该导航属性,即不需要知道代码中的FK列名。但是,如果您坚持指定它,您可以在您的类中尝试以下内容:
public class Application
{
// other properties
public int ApplicationUserId { get; set; }
public virtual User User {get; set; }
}
在DbContext类中,使用fluent API并使用如下内容重写ModelCreating方法:
public class MyDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Application>()
.HasRequired(x => x.User)
.WithMany()
.HasForeignKey(k => k.ApplicationUserId);
}
}
公共类MyDbContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(x=>x.User)
.有很多
.HasForeignKey(k=>k.applicationserid);
}
}
注意:我没有对此进行测试,因此可以根据您的具体需要对其进行自定义。如果您只是将虚拟属性添加到
应用程序
类中,EF应该负责在数据库中命名FK,您只需从代码中访问该导航属性,即您不需要知道代码中的FK列名。但是,如果您坚持指定它,您可以在您的类中尝试以下内容:
public class Application
{
// other properties
public int ApplicationUserId { get; set; }
public virtual User User {get; set; }
}
在DbContext类中,使用fluent API并使用如下内容重写ModelCreating方法:
public class MyDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Application>()
.HasRequired(x => x.User)
.WithMany()
.HasForeignKey(k => k.ApplicationUserId);
}
}
公共类MyDbContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(x=>x.User)
.有很多
.HasForeignKey(k=>k.applicationserid);
}
}
注意:我没有对此进行测试,因此请根据您的具体需要定制此功能。您可以执行类似的操作吗
public class Application
{
public int ApplicationId { get; set; }
[Required]
[DisplayName("First Name")]
public string FirstName { get; set; }
[DisplayName("Last Name")]
public string LastName { get; set; }
[ForeignKey("aspnetusers")]
[Column("Id")]
public int ApplicationUserId { get; set; }
public virtual aspnetusers aspnetusers {get; set; }
....
你能做些类似的事情吗
public class Application
{
public int ApplicationId { get; set; }
[Required]
[DisplayName("First Name")]
public string FirstName { get; set; }
[DisplayName("Last Name")]
public string LastName { get; set; }
[ForeignKey("aspnetusers")]
[Column("Id")]
public int ApplicationUserId { get; set; }
public virtual aspnetusers aspnetusers {get; set; }
....
出于某种原因,它说“aspnetusers”不是有效的导航属性。我在回答中添加了虚拟导航属性,出于某种原因,它说“aspnetusers”不是有效的导航属性。我在回答中添加了虚拟导航属性,你能提供一个仅添加虚拟属性的示例吗?这样行吗?公共虚拟应用程序用户ApplicationUser{get;set}是的,我相信这会起作用,如果
ApplicationUser
是正确的类型,两个表都在同一个数据库中,ApplicationUser
在同一个DbContext中。但是,好的做法是将标识数据库和应用程序数据库分开,在这种情况下,您只需将ApplicationUser及其ID属性存储为一个“松散”属性,而该属性在数据库中不会“物理”相关。如果标识数据库和应用程序数据库分开,上述讨论就变得无关紧要了;)这确实创建了外键并将其命名为ApplicationUser_Id。出于绑定目的,我是使用此名称还是使用导航属性?例如,我有一个下拉列表:ViewBag.FullName=newselectlist(db.Users,“Id”,“FullName”,application.ApplicationUser);我总是喜欢在可能的情况下使用导航属性。您能提供一个仅添加虚拟属性的示例吗?这样行吗?公共虚拟应用程序用户ApplicationUser{get;set}是的,我相信这会起作用,如果ApplicationUser
是正确的类型,两个表都在同一个数据库中,ApplicationUser
在同一个DbContext中。但是,好的做法是将标识数据库和应用程序数据库分开,在这种情况下,您只需将ApplicationUser及其ID属性存储为一个“松散”属性,而该属性在数据库中不会“物理”相关。如果标识数据库和应用程序数据库分开,上述讨论就变得无关紧要了;)这确实创建了外键并将其命名为ApplicationUser_Id。出于绑定目的,我是使用此名称还是使用导航属性?例如,我有一个下拉列表:ViewBag.FullName=newselectlist(db.Users,“Id”,“FullName”,application.ApplicationUser);我总是喜欢在可能的情况下使用导航属性。不是我就是另外两个回答者没有领会你的意思。你不是在问如何将aspnetusers.Id
(作为列)映射到applicationserid
(作为属性)吗?我或其他两位回答者都没有领会你的意思。您不只是问如何将aspnetusers.Id
(作为列)映射到applicationserid
(作为属性)吗?