C# 使用实体框架的默认与自定义
我有一个默认模板表。它对所有用户都是全球性的。如果用户没有自定义模板,我希望拉取默认模板。如果用户决定自定义模板,则应将其保存在customtemplates表中,而不是GlobalTemplates表中。 自定义表包含所有globaltemplates字段,外加一个用户id和一个与其替换的全局表相关的id 为了进一步充实这一点,假设有3个模板,用户只想自定义模板2。我通常会拉整个globaltemplates表以及customtemplates表中与用户相关的任何内容。然后,在类属性中,我将在get中执行如下操作:C# 使用实体框架的默认与自定义,c#,asp.net,sql,entity-framework,C#,Asp.net,Sql,Entity Framework,我有一个默认模板表。它对所有用户都是全球性的。如果用户没有自定义模板,我希望拉取默认模板。如果用户决定自定义模板,则应将其保存在customtemplates表中,而不是GlobalTemplates表中。 自定义表包含所有globaltemplates字段,外加一个用户id和一个与其替换的全局表相关的id 为了进一步充实这一点,假设有3个模板,用户只想自定义模板2。我通常会拉整个globaltemplates表以及customtemplates表中与用户相关的任何内容。然后,在类属性中,我将在
MyTemplateA
get { return customtemplates.A ?? globaltemplates.A; }
我可以在没有poco的情况下使用直接ef4/linq来完成这项工作吗?
一个具有一些附加属性的分部类,比如
因为我总是只编辑customtemplates表(添加/编辑/删除),所以拉取哪个版本的模板并不重要。我想弄清楚这是一个插入还是一个更新可能会很麻烦。在我看来,它不会像您预期的那样工作,因为EF将实体和表紧密地联系在一起。您不能将单个实体映射到两个表,除非是非常特殊的情况,如拆分或继承 所以,如果您有
模板
实体,它只能映射到单个表,但您有两个。您可以使用TPC继承,其中Template
将是映射到GlobalTemplates
表的基本实体,UserTemplate
将是映射到UserTemplates
表的派生实体。TPC(每个具体类型的表)是一种继承类型,其中派生实体的表包含父实体表中的所有列
但对于您的场景,继承仍然存在一些问题:
是可编辑的-如果要使其只读,必须在应用程序逻辑中正确处理它。当您在上下文中调用模板
时,将保存对附加的SaveChanges
实例的任何更改模板
- 加载
不能直接将其转换为模板时
以使其特定于用户。您必须创建UserTemplate
的新实例,并将属性从UserTemplate
复制到新创建的实例Template
模板
实体,它只能映射到单个表,但您有两个。您可以使用TPC继承,其中Template
将是映射到GlobalTemplates
表的基本实体,UserTemplate
将是映射到UserTemplates
表的派生实体。TPC(每个具体类型的表)是一种继承类型,其中派生实体的表包含父实体表中的所有列
但对于您的场景,继承仍然存在一些问题:
是可编辑的-如果要使其只读,必须在应用程序逻辑中正确处理它。当您在上下文中调用模板
时,将保存对附加的SaveChanges
实例的任何更改模板
- 加载
不能直接将其转换为模板时
以使其特定于用户。您必须创建UserTemplate
的新实例,并将属性从UserTemplate
复制到新创建的实例Template