为了账号安全,请及时绑定邮箱和手机立即绑定

使Entity Framework生成的实体实现接口

使Entity Framework生成的实体实现接口

C#
繁华开满天机 2022-06-19 09:59:11
你好我有这个界面:public interface X {    int Id { get; set; }    int Number { get; set; }}我想要一个由实体框架生成的具有此属性的实体来实现此接口。我怎么做?我试图做一个部分类,但我得到一个编译错误,迫使我在接口中实现属性,如下所示。public partial class A : X {    int Id { get; set; }    int Number { get; set; }}这是实体框架生成的类://------------------------------------------------------------------------------// <auto-generated>//     This code was generated from a template.////     Manual changes to this file may cause unexpected behavior in your application.//     Manual changes to this file will be overwritten if the code is regenerated.// </auto-generated>//------------------------------------------------------------------------------namespace App{    using System;    using System.Collections.Generic;    public partial class A    {        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]        public A()        {        }        public int Id { get; set; }        public int Number { get; set; }    }}我有这些当前文件:1.namespace ConfApp.model{    using System;    using System.Collections.Generic;    public partial class INSTITUICAO    {        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]        public INSTITUICAO()        {            this.UTILIZADOR = new HashSet<UTILIZADOR>();        }        public int Id { get; set; }        public string Nome { get; set; }        public string Morada { get; set; }        public string Pais { get; set; }        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]        public virtual ICollection<UTILIZADOR> UTILIZADOR { get; set; }    }}
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

由于 Entity Framework 生成的类已经包含接口的属性,因此您只需在 class 上声明接口A。


整个图片可能包括以下3个文件。

确保这些部分类的名称和命名空间匹配,并且这两个.cs文件是同一个 Visual Studio 项目的一部分。


接口X.cs

(按照惯例,在接口I前面加上IX.)


namespace App

{

    public interface X {

        int Id { get; set; }

        int Number { get; set; }

    }

}

由实体框架生成的类A.cs

(保留这个自动生成的原样,如下所示。)


//------------------------------------------------------------------------------

// <auto-generated>

//     This code was generated from a template.

//

//     Manual changes to this file may cause unexpected behavior in your application.

//     Manual changes to this file will be overwritten if the code is regenerated.

// </auto-generated>

//------------------------------------------------------------------------------


namespace App

{

    using System;

    using System.Collections.Generic;


    public partial class A

    {

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]

        public A()

        {

        }


        public int Id { get; set; }

        public int Number { get; set; }

    }

}

X例如,类中的接口声明A。A.partial.cs


namespace App

{

    public partial class A : X {

    }

}


查看完整回答
反对 回复 2022-06-19
?
呼唤远方

TA贡献1856条经验 获得超11个赞

public interface IBaseEntity {

    int Id { get; set; }

    int Number { get; set; }

}

假设您有实体框架生成的 StudentEntity.cs


namespace MyProject.DAL.Entities

{

    public partial class StudentEntity

    { }

}

创建新文件 StudentEntityExtended.cs 并在其中放置您的部分类


namespace MyProject.DAL.Entities

{

    public partial class StudentEntity : IBaseEntity {


    }

}

然后


public class SchoolContext: DbContext 

{

    public SchoolContext(): base()

    {


    }


    public DbSet<Student> Students { get; set; }

}

现在,Students DbSet 继承自 BaseClass,因此具有来自其 anchestory 的属性


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信