为什么继承的类不是接受值

时间:2016-12-23 06:55:29

标签: c#

我正在使用Ado.net实体框架。为什么继承的类不接受基类值?

表格

CREATE TABLE [dbo].[Access1](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [F_Name] [varchar](50) NULL,
    [L_Name] [varchar](50) NULL,
    [Middle_Name] [varchar](50) NULL,
    [Gender] [varchar](10) NULL,
PRIMARY KEY CLUSTERED 
public abstract class Common
{
    public string F_Name { get; set; }
    public string L_Name { get; set; }      
}
public partial class Access1 : Common
{
    public string Middle_Name { get; set; }
    public string Gender { get; set; }
}

Home.cs

1)这里"Access1 hh = new Access1();"不接受来自抽象基类的值。

2)hh.F_Name显示null

public ActionResult AbsAssClass(General ss)
{
      Access1 hh = new Access1();
        var access = new Access1
        {
            F_Name=ss.F_Name, L_Name = ss.L_Name 
        };

        db.Access1.Add(access); //An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code
}

1 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 创建一个构造函数,接受两个字符串作为参数,并将它们分配给您的属性:

    abstract class Common
    {
        public Common(string fName, string lName)
        {
            this.F_Name = fName;
            this.L_Name = lName;
        }
    }
    

    为了使其工作,派生类需要一个带有两个参数的(空)构造函数,这些参数只是重定向到基类类:

    Access(string fName, string lName) : base(fName, lName) { }
    
  2. 或者通过对象初始化器直接设置params:

    var access = new Access { F_Name = anotherValue, L_Name = myValue }
    

    这样做的好处是你甚至不需要修改类的代码,因为你不需要任何构造函数(实际上你只是使用了default-one并在调用后进行了一些赋值)。这和写这个一样:

    var access = new Access();
    access.F_Name = myValue;
    access.L_Name = anotherValue;