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
Entity framework 在实体框架中重用实体跨多个Visual studio解决方案—公共列和不同列—首先是数据库、模型还是代码?_Entity Framework_Architecture_Crud - Fatal编程技术网

Entity framework 在实体框架中重用实体跨多个Visual studio解决方案—公共列和不同列—首先是数据库、模型还是代码?

Entity framework 在实体框架中重用实体跨多个Visual studio解决方案—公共列和不同列—首先是数据库、模型还是代码?,entity-framework,architecture,crud,Entity Framework,Architecture,Crud,我需要帮助选择CRUD方法,以满足多个企业解决方案中具有公共字段和可变字段的单独表的需求 下面是每个解决方案数据库中名为Organization的表中列的简化示例 Db1: Id(通用) 名称(通用) 地址(普通) 客户身份 Db2: 身份证件 名称 住址 无雇主 注册状态 Db3: 身份证件 名称 住址 第二地址 Db4: 身份证件 名称 住址 林克迪德 背景: 我有同行业的客户,他们都有我开发的类似的MIS(带数据库的前端)系统。 所有客户机的功能概念相同,但30%的表的表列不同,业务规则不

我需要帮助选择CRUD方法,以满足多个企业解决方案中具有公共字段和可变字段的单独表的需求

下面是每个解决方案数据库中名为Organization的表中列的简化示例

Db1: Id(通用) 名称(通用) 地址(普通) 客户身份

Db2: 身份证件 名称 住址 无雇主 注册状态

Db3: 身份证件 名称 住址 第二地址

Db4: 身份证件 名称 住址 林克迪德

背景: 我有同行业的客户,他们都有我开发的类似的MIS(带数据库的前端)系统。 所有客户机的功能概念相同,但30%的表的表列不同,业务规则不同,屏幕必须与每个独特的客户机要求相匹配

每个客户端的系统都有自己的Visual studio解决方案和SQL server数据库。 客户机拥有自己的特定数据库和源代码

所有客户端都需要定期更改功能。有时,由于政府/财务要求/增值,会为所有客户添加表中的新数据列,有时只为一个特定客户添加数据列,而该客户的请求是唯一的

查看客户端数据库之间的数据库结构,这些表具有相同的表名。表中有70%的表列相同,不同之处在于为该客户端唯一的客户端添加了列或新表。前端屏幕也各不相同

现在创建新的解决方案并维护解决方案非常耗时,因为核心字段、规则和视图与唯一字段、规则和视图之间没有代码分离,因此很难区分核心代码和自定义代码

设计:
  • 我需要在解决方案之间共享通用CRUD和业务规则
  • 我需要为每个客户端保留一个单独的解决方案,并且一个客户端的唯一解决方案代码或表字段不得位于另一个客户端的解决方案代码和数据库中
  • 我不需要一个单独的表链接到每个名为custom1、custom2、custom3的公共表或列,因为客户机在数据库上有自己的报告工具,需要在同一个表中使用英文列名
  • CRUD必须与MVC3 Razor以及Silverlight 4前端、sql server 2008R2后端配合使用
  • 之后添加新的db字段必须很容易,并且不会产生太大的影响
  • 我的计划: 我有一个想法,使用常用表名的基类(如table OrganizationBase)重新设计系统,然后使用从中继承的类(如OrganizationExtend)包含唯一的列名 然后CRUD将基类和父类的字段连接在一起,并使用ADO.net更新数据库。基类源代码将在解决方案之间共享

    然而,我希望使用实体框架来实现我的目标,但我不确定使用EF是否可行,或者EF是否支持我的目标,即使用每个db表的uniquecolumns分隔公共字段,以及如何进行设计。我以前没有用过EF,但我想用它来做RAD

    我的问题: 我的需求是否可以通过实体框架实现?如果可以,另一个CRUD解决方案如何或是更适合此需求


    从我所读到的关于实体框架的内容来看,不清楚代码、模型或数据库首先是否最符合我的要求?建议将不胜感激。

    数据库优先和模型优先使用不适合继承的edmx文件

    使用EFcode first,您可以使用带有继承的普通C#OO类,并使用EF映射将继承的类映射到表

    因此,我的代码如下所示:

    解决方案之间的共享命名空间类:

    public abstract class OrganisationBase
    {
        public int OrganisationId { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public string Address { get; set; }
        [Required]
        public string TelNo { get; set; }
    }
    
    客户端1特定的命名空间类:

    public class Organisation : OrganisationBase
        {
            [Required]
            public int ClientStatusId { get; set; }
        }
    
    public class Organisation : OrganisationBase
    {
        [Required]
        public int NoOfEmployees { get; set; }
        [Required]
        public int RegistrationStatusId { get; set; }
    }
    
    客户端2特定的命名空间类:

    public class Organisation : OrganisationBase
        {
            [Required]
            public int ClientStatusId { get; set; }
        }
    
    public class Organisation : OrganisationBase
    {
        [Required]
        public int NoOfEmployees { get; set; }
        [Required]
        public int RegistrationStatusId { get; set; }
    }