使用实体框架向模型添加方法

时间:2010-11-30 14:54:43

标签: c# .net entity-framework orm

使用实体框架,是否可以向对象类添加方法? 例如,我有一个CLIENT映射,我想创建一个“getAgeFromBirhDate”方法。

4 个答案:

答案 0 :(得分:22)

是。这是可能的。实体框架生成Partial Classes

这意味着您可以创建另一个包含Partial Class定义的另一部分的文件(使用其他方法),一切都会正常工作。

答案 1 :(得分:4)

第一个答案的例子:

如果您有一个名为Flower的实体,则可以使用此partial类向其添加方法:

namespace Garden //same as namespace of your entity object
{
    public partial class Flower  
    {
        public static Flower Get(int id)
        { 
            //
        }
    }
}

答案 2 :(得分:2)

public static class ModelExtended
{
    public static void SaveModelToXML(this Model1Container model, string xmlfilePath)
    {
        ///some code
    }
}

答案 3 :(得分:0)

假设您的部分类具有来自数据库的实体框架属性价格:

    namespace Garden //same as namespace of your entity object
    {
        public partial class Flower  
        {
            public int price;
            public string name;
            // Any other code ...
        }
    }

如果您不想使用其他分部类,则可以定义自己的自定义类,其中包含作为属性存储的原始实体。您可以添加任何额外的自定义属性和方法

namespace Garden //same as namespace of your entity object
{
    public class CustomFlower  
    {
        public Flower originalFlowerEntityFramework;

        // An extra custom attribute
        public int standardPrice;


        public CustomFlower(Flower paramOriginalFlowerEntityFramework)
        { 
            this.originalFlowerEntityFramework = paramOriginalFlowerEntityFramework
        }


        // An extra custom method
        public int priceCustomFlowerMethod()
        {
            if (this.originalFlowerEntityFramework.name == "Rose" ) 
                return this.originalFlowerEntityFramework.price * 3 ;
            else 
                return this.price ;
        }

    }
}

然后,无论您想在何处使用它,都可以创建自定义类对象,并在其中存储实体框架中的对象:

//Your Entity Framework class
Flower aFlower = new Flower();
aFlower.price = 10;
aFlower.name = "Rose";

// or any other code ...

// Your custom class
CustomFlower cFlower =  new CustomFlower(aFlower);
cFlower.standardPrice = 20;

MessageBox.Show( "Original Price : " + cFlower.originalFlowerEntityFramework.price );
// Will display 10
MessageBox.Show( "Standard  price : " + cFlower.standardPrice );
// Will display 20
MessageBox.Show( "Custom Price : " + cFlower.priceCustomFlowerMethod() );
// Will display 30