实体框架:忽略列

问题描述 投票:0回答:5

vAveat:

我一直在尝试在我的工作地点引入业务对象建模已有几年了,并且由于必须手动曲折的其他代码数量而被拒绝。由于设计师和代码生成,因此EF目前被视为可行的解决方案,因此任何涉及手动crank XML的选项只会将我的其余同事从EF拒之门外。因此,我正在寻找可以使用设计器或使用代码来完成的事情。

Edit:

我猜想我在这里寻找的是...

(a)一种创建模型的方法,而无需EF引用商店中的列(SSDL),因此不想以任何方式对其进行操作 (b)一种在我创建objectContext时将“ storegeneratedPattern”属性设置针对属性的一种方法(简单的答案是在.ssdl中手动操作此属性我不能走.csdl,.msl&.ssdl的路线。

您可以使用实体框架吗?是的;很容易。您可以与实体框架设计师一起执行此操作吗?不幸的是,这要困难得多。

您遇到的问题是该列存在在EDMX中的存储模式(SSDL)中。使用GUI设计师删除列只需将其从客户端架构而不是映射或存储模式中删除。但是,它足够简单,可以进入EDMX并将其删除。完成此操作后,您还可以将其从EDMX的客户端架构部分中的映射中删除,实体框架将更长时间抱怨它是未藏品的。 问题解决了,对吗? 韦尔,不。当您使用GUI设计器从数据库中更新EDMX时,存储模式将被抛弃并重新生成。因此,您的专栏将回来。据我所知,没有办法告诉GUI设计师永远不要绘制特定的列。因此,每次使用GUI设计师更新时,您都必须重新进行此操作。幸运的是,EDMX是XML,因此您可以使用您选择的XML变换,LINQ或XML工具进行此操作。

您不能使用所需的列创建视图并通过实体函数向导导入并将其映射到您的实体?

entity-framework
5个回答
30
投票

您根本不希望该列出现在模型中吗?

尝试在设计器视图中选择列并击中删除键。

eDit

您可以将私有财产的设置器制成。 那么您的应用将无法修改值。


2
投票
您可以修改文本模板以忽略这些列在生成实体类时。例如,如果您在文档摘要中添加了“忽略”,则可以修改模板以通过替换来忽略它们;

Dim simpleProperties as IEnumerable(Of EdmProperty) = typeMapper.GetSimpleProperties(entity)

1
投票
;

Dim simpleProperties as IEnumerable(Of EdmProperty) = typeMapper.GetSimpleProperties(entity).Where(Function(p) p.Documentation is nothing orelse p.Documentation.Summary.IndexOf("IGNORE")<0)

右键单击图形表示中的字段,然后选择“删除”。我发现,当您一次对建模进行大量更改并开始失去更改时,有时您会遇到错误。 最好的选择可能是重建EF生成的模型。

保留时,当您“从数据库中进行更新”时,将不会删除生成模型上的旧字段,您将必须手动删除它们。例如,如果您将数据库中的datefield1重命名为datefield2,然后“从数据库中更新模型”,现在您将在结果模型上查看datefield1和datefield2。这可能是错误的原因。


1
投票

在EDMX设计器中,选择属性并将StoreGeneratedPattern设置为计算。

用它是/是ef6,您可以使用部分类别和元数据型tribute来执行此操作(以及许多其他漂亮的事物,例如添加范围和自定义验证器)。

using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; [MetadataType(typeof(MyEntityMetadata))] public partial class MyEntity { } public class MyEntityMetadata { [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public object CreatedDate { get; set; } }
    

0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.