在Entity Framework Database First中重写get、set方法

3

我有一个基于模型的 EF 4.4 .NET 4.0 类:

public partial class Test
{
    public int Id {get; set; } 
    public int Date { get; set; }
    //other fields...
}

我无法更改数据库模型,但我需要在这个类中覆盖get和set方法。就像这样:
 [MetadataType(typeof(TestMetadata))]
 public partial class Test
 {
     public class TestMetadata
     {
         private int data;
         public DateTime Date
         {
            get
            {
                return DateTime.Today.Date;
            }
            set
            {
                date = value.Day;
            }
        }
    }

这种方法行不通。有没有可能在部分类中覆盖get set?

描述您想要实现的目标以及为什么要这样做?给出一个真实的场景。 - Erti-Chris Eelmaa
我有一个旧系统,其中日期和时间保存在int字段中(在数据库中)。我将旧系统重写为C#+ EF,并且我没有更改数据库结构(因为要兼容性)。 - mds
但是在你的第一个代码中,属性Date直接在Test类中,然而在下一个代码中,它在TestMetadata中。你能解释一下你想实现什么功能吗? - Krzysztof Madej
第一类是来自数据库(模型优先),我不能更改它们,因为更新后我会失去更改。我需要从数据库获取日期,将其转换为日期格式并显示为(例如yyy/mm/dd),然后在转换为Int(例如77768)后将数据保存(设置)到数据库中。 - mds
2个回答

2
我的解决方法。 类似这样:
public partial class Test
    {
        public DateTime DateSi
        {
            get
            {
                return ConvertIntToDate(Date)
            }
            set
            {
                Date = ConvertDateToInt(value);
            }
        }
    }

在C#中,我使用Test.DateSi(未映射),并且EF将其保存到数据库字段Date中,具有适当的Int值。我只需要记住在C#中使用DateSi而不是Date即可。

你甚至可以将 Date 属性设为私有。EF 仍然能够填充它。 - Gert Arnold

0
这是解决方案的一部分。我不明白你想要保存转换后的日期到哪里(哪个属性)。没有办法将int保存到datetime字段中。
public partial class Test
{
    string format = "yyy/mm/dd";

    public string DateFormat { get { return Date.ToString(format); }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接