C# 代码优先Suppress外键生成

C# 代码优先Suppress外键生成,c#,ef-code-first,entity-framework-5,C#,Ef Code First,Entity Framework 5,我们有一个包含许多实体的DB,我举了一个三个实体的例子—案例、任务和注释。任何实体都可以有注释,我们决定采用以下DB设计 Case: - CaseId - Title Task: - TaskId - Title Note: - NoteId - Desc - ParentId (will contain the PK of Case/Task etc but without FK constraint) POCO将如下所示: Case { CaseId

我们有一个包含许多实体的DB,我举了一个三个实体的例子—案例、任务和注释。任何实体都可以有注释,我们决定采用以下DB设计

Case:
  - CaseId
  - Title

Task:
  - TaskId
  - Title

Note:
  - NoteId
  - Desc
  - ParentId (will contain the PK of Case/Task etc but without FK constraint)
POCO将如下所示:

Case
{
  CaseId
  Title
  Notes
}

Task
{
  TaskId
  Title
  Notes
}

我们不希望有引用约束和所有约束,因为这些注释不会被删除。我们可以使用
EDMX
对此进行建模,并希望使用代码优先的方法。我们已经搜索过了,并查看了多态关联的建议等。如果给出这种设计,那么首先使用代码建模的最佳方法是什么?提前感谢。

我建议您使用继承-根据您的描述如下:

public class EntityWithNotes
{
  public int Id { get; set; }
  public string Title { get; set; }
  public Collection<Note> { get; set; }
}

public class Note
{
  public int Id { get; set; }
  public string Description { get; set; }
  public int ParentId { get; set; }
}

public class Case : EntityWithNotes { /* ...*/ }
public class Task : EntityWithNotes { /* ...*/ }
public class EntityWithNotes
{
公共int Id{get;set;}
公共字符串标题{get;set;}
公共集合{get;set;}
}
公开课堂讲稿
{
公共int Id{get;set;}
公共字符串说明{get;set;}
public int ParentId{get;set;}
}
公共类大小写:EntityWithNotes{/*…*/}
公共类任务:EntityWithNotes{/*…*/}

…并使用外键关联。引用约束不仅仅是关于删除。

谢谢您的回复,丹尼斯。如果您或其他人能为我们指出一种解决原始问题的方法,即不使用/让ef生成FKs,我将不胜感激。是否希望先使用代码生成/迁移数据库?是,我们希望根据问题生成DB。您不能对EF在创建数据库时不会尝试转换为FK约束的关联进行建模。您必须手动加入注释,例如在存储库中。