Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# 实体框架-如何在多个应用程序之间共享一些表_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 实体框架-如何在多个应用程序之间共享一些表

C# 实体框架-如何在多个应用程序之间共享一些表,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我们正试图找到一种在内部应用程序之间共享表的方法,这样我们就可以为用户和部门等常见事物提供一组数据 如果我们有简单的模型,如: public class User { public int Id { get; set; } public string Username { get; set; } public virtual IQueryable<Department> Departments { get; set; } } public class Dep

我们正试图找到一种在内部应用程序之间共享表的方法,这样我们就可以为用户和部门等常见事物提供一组数据

如果我们有简单的模型,如:

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public virtual IQueryable<Department> Departments { get; set; }
}

public class Department
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual IQueryable<User> Users { get; set; }
}

尝试在应用程序之间共享数据库对象,特别是当共享的对象包含关键数据时,可能会导致更大的混乱和头痛。因此,以一种稍微不同但在体系结构上可扩展的方式来解决这个问题可能会很有用,从而获得长期的好处

对于您的每个应用程序,清楚地了解什么是主数据,什么是事务数据,将使您受益匪浅。粗略地说,主数据将包含企业中的所有名词。这通常意味着开展业务所需的人员、地点和事物。通常,用户和部门是主数据的一部分。识别主数据的简单方法是从多个应用程序的角度查看数据,然后查看数据对于所有应用程序是否应该具有相同的语义。另一方面,事务数据将覆盖所有事务。对于外部系统,可以是订单、付款、发票等。对于内部应用,可以是费用报告、时间表、工资单等

一旦您了解了这一点,就可以使用通常称为主数据维护(MDM)的规程中涵盖的众所周知的技术来管理主数据。在应用主数据维护原则时,您要做的一些事情包括:

  • 每种类型的主数据只能由一个系统管理(创建、更新、删除、审核和归档)。不得允许多个应用程序管理主数据,因为这可能导致数据不一致和错误处理
  • 需要访问主数据的应用程序必须通过对负责所需主数据的MDM应用程序进行API调用来实现。这确保了事务一致性、数据依赖性、可重用性等

  • 企业没有必要拥有单一的MDM系统。不同类型的主数据可以由不同的MDM系统管理,只要它们之间没有重叠,并且明确划分了它们的角色。MDM系统也可能不会过于复杂。例如,在我以前的一个角色中,我设计了一个数据访问框架,在许多应用程序都希望连接到的庞大数据库模式之上使用Oracle存储过程。这些应用程序中的许多都非常陈旧,只能直接调用数据库代码,这就是为什么该解决方案是使用存储过程设计的。我们有一个大型的DBA池,可以在3周内实现该解决方案。之后,我们将Mule ESB置于存储过程之上,为Java和.NET平台上编写的应用程序提供更现代的API(XML、JSON、BSON、SOAP)。每个消费者应用程序都使用最适合其环境的技术获得了自己的系统视图。

    Microsoft建议SQL Server 2012提供您实际需要的功能。可能会让你对这个问题有更好的见解

    另一种方法是使用不同的数据库保存个人和部门的主数据。然后,您可以使用创建两个数据库的“统一视图”。我认为实体框架可以看到这两个数据库的“统一视图”


    希望我能帮忙

    您是否考虑过将它们分离到其on上下文中,以便它可以在其自己的项目中,并且只在您的所有应用程序中引用,或者添加另一层,其中包含所有其他应用程序使用的web服务?您可以在每个数据库中创建视图,其中包含从用户/部门表所在的数据库中选择的内容生活。然后将这些模型添加到您的上下文中。一个相对简单的方法是创建一个OData服务供内部使用。这使您可以与主数据库松散耦合,而不是直接的数据库链接。
    public class AppBHuzzah
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int UserId { get; set; }
        public virtual User User { get; set; }
    }
    
    public class AppAFoo
    {
        public int Id { get; set; }
        public DateTime DateTime { get; set; }
        public int UserId { get; set; }
        public virtual User User { get; set; }
    }