我想基于命名约定创建与实体框架的关系的1:n关系。我正在使用codefirst。实体框架忽略的公约和alwas创建两个外键列,而不是只有一个:实体框架代码在创建1:n关系时,首先在数据库中生成两个外键列
- StreamWorkerUser_Id(我想仅此列)
- StreamWorkerUser_Id1
的配置类配置类似如下:
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
我正在使用Microsoft.Identity Framework,并为所有模型自定义类。
我的DbContext类非常简单,如下所示。
public class StreamWorkerDataContext : IdentityDbContext<StreamWorkerUser, StreamWorkerRole, int, StreamWorkerUserLogin, StreamWorkerUserRole, StreamWorkerUserClaim>
{
public DbSet<Task> Tasks { get; set; }
}
的Task
模型:
public class Task : StreamWorkerEntity
{
public StreamWorkerUser StreamWorkerUser { get; set; }
}
的StreamWorkerUser
模型:
public class StreamWorkerUser : IdentityUser<int, StreamWorkerUserLogin, StreamWorkerUserRole, StreamWorkerUserClaim>
{
public virtual List<Task> Tasks { get; set; } // also tested ICollection
}
的Task
类从该基类型继承,这里也被定义StreamWorkerUser
类型的两个属性(但是,这些列在数据库中正确生成。):
public class StreamWorkerEntity
{
[Key]
public int Id { get; set; }
public DateTimeOffset Created { get; set; }
public DateTimeOffset Updated { get; set; }
public StreamWorkerUser Creator { get; set; }
public StreamWorkerUser LastEditor { get; set; }
}
是否有可能,属性Creator
和LastEditor
干扰数据库迁移?
我是否正确理解约定?
更多的信息:
- 实体框架版本6.1.3
- Microsoft.AspNet.Identity.Core 2.2.1
- Microsoft.AspNet.Identity.EntityFramework 2.2.1
- ASP在碧霞
- C#6.0
- .NET 4 MVC 5
- SQL服务器.NET框架4.5.2
- 所有这些代码是一类libary
你怎么又希望存储关系Creator和LastEditor如果你只想要一个外键? – faint220
@ faint220我不想只有一个外键。应该有三个。一个用于'Creator',一个用于'LastEditor',一个用于'StreamWorkerUser'。目前有4个列生成:Creator_Id,LastEditor_Id,StreamWorkerUser_Id,StreamWorkerUser_Id1。 –
您是否尝试过实体类型配置?你可以明确地声明外键使用流利的API – Efe