C# 独立数据库中的实体框架核心外键
我是EF核心和数据库的新手,因为我还是一名学生。我有一个要求,在我的项目有一个单独的身份数据库从应用程序数据库 我已经使用ASP.NET核心标识和一些自定义属性设置了标识数据库。我正在建立另一个数据库来存储联系人页面的票证,由于某种原因,我似乎无法使外键正常工作。当我迁移新数据库时,它会在我的应用程序数据库中为我已经在Identity数据库中自定义的Identity类创建一个重复表 我想知道如何防止这种情况发生,以及它是否与外键有关,因为我在网上找到的信息似乎表明EF Core 2.1不支持这种情况 标识模型中的类:C# 独立数据库中的实体框架核心外键,c#,asp.net-core-mvc,relational-database,asp.net-core-2.0,entity-framework-core-2.1,C#,Asp.net Core Mvc,Relational Database,Asp.net Core 2.0,Entity Framework Core 2.1,我是EF核心和数据库的新手,因为我还是一名学生。我有一个要求,在我的项目有一个单独的身份数据库从应用程序数据库 我已经使用ASP.NET核心标识和一些自定义属性设置了标识数据库。我正在建立另一个数据库来存储联系人页面的票证,由于某种原因,我似乎无法使外键正常工作。当我迁移新数据库时,它会在我的应用程序数据库中为我已经在Identity数据库中自定义的Identity类创建一个重复表 我想知道如何防止这种情况发生,以及它是否与外键有关,因为我在网上找到的信息似乎表明EF Core 2.1不支持这种
using Microsoft.AspNetCore.Identity;
namespace WebTemplate.Models
{
public class Identity : IdentityUser
{
public string Building { get; set; }
public string Room { get; set; }
public string FullName { get; set; }
}
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace WebTemplate.Models
{
public enum StatusCode
{
[Display(Name="Open")]Open,
[Display(Name = "Under Review")] UnderReview,
[Display(Name = "Pending Change")] PendingChange,
[Display(Name = "Closed-Resolved")] Resolved,
[Display(Name = "Closed-No Action")] NoAction
}
public class ContactForm
{
[Key]
public int ContactFormId { get; set; }
public string SenderId { get; set; }
[ForeignKey("SenderId")]
public Identity Sender { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public StatusCode Status { get; set; }
}
}
ContactForm型号中的类别:
using Microsoft.AspNetCore.Identity;
namespace WebTemplate.Models
{
public class Identity : IdentityUser
{
public string Building { get; set; }
public string Room { get; set; }
public string FullName { get; set; }
}
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace WebTemplate.Models
{
public enum StatusCode
{
[Display(Name="Open")]Open,
[Display(Name = "Under Review")] UnderReview,
[Display(Name = "Pending Change")] PendingChange,
[Display(Name = "Closed-Resolved")] Resolved,
[Display(Name = "Closed-No Action")] NoAction
}
public class ContactForm
{
[Key]
public int ContactFormId { get; set; }
public string SenderId { get; set; }
[ForeignKey("SenderId")]
public Identity Sender { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public StatusCode Status { get; set; }
}
}
AppIdentityDbContext:
//removed for brevity
namespace WebTemplate.Models
{
public class AppIdentityDbContext : IdentityDbContext<Identity>
{
public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) : base(options) { }
//Seed Data removed for brevity
}
}
//removed for brevity
namespace WebTemplate.Models
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
public DbSet<ContactForm> ContactForms { get; set; }
}
}
//为简洁起见,已删除
命名空间WebTemplate.Models
{
公共类AppIdentityDbContext:IdentityDbContext
{
公共AppIdentityDbContext(DbContextOptions选项):基本(选项){}
//为简洁起见,删除了种子数据
}
}
ApplicationDbContext:
//removed for brevity
namespace WebTemplate.Models
{
public class AppIdentityDbContext : IdentityDbContext<Identity>
{
public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) : base(options) { }
//Seed Data removed for brevity
}
}
//removed for brevity
namespace WebTemplate.Models
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
public DbSet<ContactForm> ContactForms { get; set; }
}
}
//为简洁起见,已删除
命名空间WebTemplate.Models
{
公共类ApplicationDbContext:DbContext
{
公共应用程序DBContext(DbContextOptions选项):基本(选项){}
公共DbSet ContactForms{get;set;}
}
}
外键不能跨数据库。只能将它们应用于同一数据库中的表。