实体框架只填充域模型中的数据库字段

本文关键字:数据库 字段 模型 框架 填充 实体 | 更新日期: 2023-09-27 17:49:36

我有一个域模型,它具有数据库中不存在的属性。例如:

public class DomainModel: IKeyedEntity
{
    //Id for the table
    public int DomainModelID { get; set; }
    //Foreign key value
    public int FooID { get; set; }
    //Text value
    public string Value { get; set; }
    //Generic reference to the id of the table
    public int Key { get { return this.DomainModelID; } }
    //No a column in the database
    public Guid ArchiveIdentifier
    {
        get { return Foo.ArchiveIdentifier; }
        set { Foo.ArchiveIdentifier = value }
    }
    //Navigation Property
    public virtual Foo Foo { get; set; }
}

可以看到,属性KeyArchiveIdentifier不是DomainModels表中的列。当我运行查询实体框架处理属性ArchiveIdentifier,如果它是数据库中的一列。下面是获取所有domainmodel时生成的SQL的示例。

SELECT 
[Extent1].[DomainModelID] AS [DomainModelID], 
[Extent1].[FooID] AS [FooID], 
[Extent1].[Value] AS [Value],
[Extent1].[ArchiveIdentifier] AS [ArchiveIdentifier] 
FROM  [dbo].[DomainModels] AS [Extent1]

实体框架不尝试填充Key属性,因为它没有设置方法,但它将ArchiveIdentifier视为表中的一列。是否有任何注释或方法告诉实体框架,ArchiveIdentifier不是一个列?

实体框架只填充域模型中的数据库字段

使用NotMappedAttribute:

[NotMapped]
public Guid ArchiveIdentifier
{
    get { return Foo.ArchiveIdentifier; }
    set { Foo.ArchiveIdentifier = value; }
}

在你的ArchiveIdentifier属性上使用[NotMapped]数据注释