Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首先在EF数据库中自定义属性_C#_Entity Framework_Ef Database First - Fatal编程技术网

C# 首先在EF数据库中自定义属性

C# 首先在EF数据库中自定义属性,c#,entity-framework,ef-database-first,C#,Entity Framework,Ef Database First,你好 我使用database first aproach从数据库创建了一个EF模型, 并为EF生成的实体类添加了几个只读属性,这些属性不在数据库中。 每次我更新模型时,都会从新表中添加数据 我丢失了创建的属性,因此必须重新创建它们 例如,在数据库中,我有属性isFemale,但在我的类中,我创建了属性isFemale public string Gender { get { if(isFemale) return "female"; e

你好

我使用database first aproach从数据库创建了一个EF模型, 并为EF生成的实体类添加了几个只读属性,这些属性不在数据库中。 每次我更新模型时,都会从新表中添加数据 我丢失了创建的属性,因此必须重新创建它们

例如,在数据库中,我有属性isFemale,但在我的类中,我创建了属性isFemale

public string Gender
{
    get
    {
           if(isFemale) return "female";
           else return "male";
     }
}
我的问题是,有没有一种方法可以从数据库中更新模型,而保留由我生成的属性


谢谢大家!

在另一个分部类而不是生成的类上添加属性。例如,如果生成的类是Person类型,请在同一项目中使用相同的命名空间定义另一个分部类:

public partial class Person
{
    public string Gender
    {
        get
        {
            if(isFemale) return "female";
            else return "male";
         }
    }
}

使用分部类可以解决您的问题,但是:

  • 必须在同一部件中定义分部类的所有零件
  • 部分零件中的属性不会持久化到数据库中
  • 不能在linq to实体中使用部分零件的特性 询问

您可以将您的类划分为部分类,并将其分为两个文件,这是我首先在数据库中使用它的方式

public partial class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public partial class Person
{
    public string FullName {
        get
        {
            return FirstName + " " + LastName;
        }
    }
}

哎哟,Richards没有回答这个问题。这个问题帮助更大,因为可以看出,你可以创建并重复你需要的课程。谢谢。可能是重复的嗨,Richard谢谢你的回答!我想更进一步,覆盖EF创建的属性。可能吗?例如,我在数据库中有一个字符串BankAccount字段,作为在接受空值的实体类中生成的结果。我想覆盖它,如果值为null,则返回空字符串。公共字符串BankAccount{get{if(_BankAccount==null)返回“”;else返回_BankAccount}。亲切的问候!不能以这种方式重写属性。您需要像现在一样使用单独的属性,或者使用函数或扩展方法。“读取更多”链接指向当前线程。正确的链接是