简体   繁体   English

实体框架:仅忽略插入字段

[英]Entity Framework: Ignoring a field on Insert only

I have an extra field in my model called StatusChange, this is populated using a sproc to fetch all fields from the table as well as the extra field StatusChange 我的模型中有一个额外的字段,称为StatusChange,使用一个sproc填充该字段,以便从表中获取所有字段以及额外的字段StatusChange

SELECT New.*, [dbo].[ftn_GetStatusChange](Old.MemberStatusId, New.MemberStatusId) AS StatusChange
FROM Member New
LEFT OUTER JOIN Member Old ON New.MemberNo = Old.MemberNo AND Old.ImportHistoryID = @ImportIdToCompare
WHERE New.ImportHistoryID = @NewestImportId 

Here is the function 这是功能

CREATE FUNCTION [dbo].[ftn_GetStatusChange]
(
    @OldStatus char,
    @NewStatus char
)
RETURNS int
AS
BEGIN
    IF (@OldStatus IS NULL)
    BEGIN
        RETURN 1
    END

    IF (@OldStatus = 'R') 
        BEGIN
            IF @NewStatus = 'C' RETURN 5
            IF @NewStatus = 'S' RETURN 4
        END

    IF (@OldStatus = 'C')
        BEGIN
            IF @NewStatus = 'R' RETURN 3
            IF @NewStatus = 'S' RETURN 4
        END

    IF (@OldStatus = 'S')
        BEGIN
            IF @NewStatus = 'C' RETURN 5
            IF @NewStatus = 'R' RETURN 3
        END

    RETURN 0
END

This is the enum that the numbers map to 这是数字映射到的枚举

public enum StatusChange
    {
        NoChange = 0,
        New = 1,
        Current = 2,
        Resigned = 3,
        Suspended = 4,
        Reinstated = 5,
    }

The Database table doesn't have the field StatusChange though as there is no need for it, so I tried adding the attribute Computed to the property in C# 虽然数据库表没有字段StatusChange,但因为它不需要它,所以我尝试将Compute属性添加到C#中的属性

This is the C# code 这是C#代码

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public StatusChange StatusChange { get; set; }

However when I call SaveChanges() on the DbContext I get the error 但是,当我在DbContext上调用SaveChanges()时,出现错误

Invalid column name 'StatusChange'.

Is there anyway I can have this property for SELECT only and ignore it on INSERT? 无论如何,我只能将此属性用于SELECT并在INSERT上将其忽略吗?

This is not tested and is not 100% what you want as its quite hard to visualize your data without actually having it... but maybe this helps... 未经测试也不是您想要的100%,因为很难在没有实际数据的情况下可视化数据……但这也许会有所帮助……

Please take with a pinch of salt its quite hard to visualize your data and requirements ;-) 请带点盐使其很难可视化您的数据和要求;-)

public class Member
{
    [Key][AutoIncromentCode]
    public int Id {get; set;} 
    public string MemberNo {get; set;}
    public string FirstName { get; set;}
    public int MemberStatusId { get; set;}

    public int ImportHistortId { get; set;}

    [NotMapped]
    public MemberStatus
    {
        return (Status)MemberStatusId
    }
}

public enum Status
{
    NoChange = 0,
    New = 1,
    Current = 2,
    Resigned = 3,
    Suspended = 4,
    Reinstated = 5,
}

public class MemberStatusDto
{
    public Member NewMember {get; set;}
    public Member OldMember {get; set;}
}

public void GetSomeStuff(int importHistortId )
{
    List<MemberStatusDto> result  = ( from N_Memeber in Content.Member
                                      join O_Member in Content.Member on 
                                      new { N_Memeber.MemberNo, O_Member.ImportHistortId } equals new {MemberNo = O_Member.MemberNo, ImportHistortId = importHistortId }
                                      into T_Members
                                      from A_Members in T_Members.DefaultIfEmpty()
                                      where N_Memeber.ImportHistoryID = importHistortId
                                     select new MemberStatusDto()
                                     {
                                        NewMember = A_Members.N_Memeber,
                                        OldMember = A_Members.O_Member
                                     }).Tolist();               

    foreach(var item in result)
    {
        var NewState = item.NewMember.MemberStatus;
        var oldState = (item.OldMember == null) ? "nothing" : item.OldMember.MemberStatus

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM