如果我有以下内容:
class Project
{
...
public virtual IList<URL> URLs {get;set;}
}
class URL
{
...
public virtual Project Project {get;set;}
}
创建的数据库将ProjectID
添加到URLs
数据库表...
如何强制实体为我创建关系表以删除URL
上的依赖关系,而不必像这样声明ProjectURL
来声明新实体:
public class ProjectURL
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProjectURLID { get; set; }
public URL URL { get; set; }
public Project Project{ get; set; }
}
我目前拥有的:
项目
ProjectID |
---------------------
64 |
网址
URLID | ProjectID |
---------------------
13 | 64
我想拥有的内容:
项目
ProjectID |
---------------------
64 |
网址
URLID |
---------------------
13 |
Project_URLs
URLID | ProjectID
---------------------
13 | 64
答案 0 :(得分:1)
您需要为URL实体配置映射,以便将其拆分为两个表。一个表是URL,另一个表还包含其他属性(如Project的foregin键)。看一下Map方法。
您的映射配置如下所示:
class URLMap : EntityTypeConfiguration<URL>
{
public URLMap()
{
Map(m =>
{
m.Properties(p => new {p.ID, p.Project});
m.ToTable("Project_URLs");
});
Map(m =>
{
m.Properties(p => new
{
p.ID,
// all other properties separated by ,
});
m.ToTable("URLs");
});
HasKey(p => p.ID);
}
}
请注意为两个表定义相同的主键(在上面的示例中,我假设了ID
属性)。
编辑:在cas中,您不知道如何处理映射配置类。
您必须将此类的实例添加到DbContext.OnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new URLMap());
}