多语言网站有两个数据库

时间:2015-07-16 17:02:08

标签: asp.net asp.net-mvc entity-framework

我目前正在开发多语言网站。它托管在不同的4个地点(国家),每个地点都有专用的数据库。它的工作正常。 该项目使用EF6。

该网站有一个菜单,其中包含MenuOrder,Visible等属性。 我不想将这些属性设置为单独为每个位置设置。它应该只在DBKey数据库中设置。

是否可以实现每个位置使用两个数据库:

  1. DBKeys:仅适用于密钥(所有位置通用)
  2. DBResx:仅用于翻译。
  3. 目前使用单一上下文。是否可以在不同的上下文中使用两个具有外键关系的上下文?

1 个答案:

答案 0 :(得分:0)

  

是否可以在不同的上下文中使用两个具有外键关系的上下文?

是的,对于在不同环境中具有外键关系的相同应用程序,当然可以使用两个上下文。但有两种情况:

  • 单个数据库的两个上下文

  • 两个不同数据库的两个上下文

我认为你在谈论第二种情况,所以我认为你只想使用也被用作外键的唯一主键因为你不能在不同数据库的表中创建关系而你必须形成应用程序层中的那些关系,可能在数据库中使用触发器和存储过程以保持一致性。

我最近回答了一个关于在不同情境下加入的问题,这里的代码就是一个例子:

public IQueryable<ActivityRegister> GetRegisters(int activityID) 
{
    var activityRegisters = ActivityDBContext.ActivityRegisters.Where(x => x.ActivityID == activityID x.IsActive == true).OrderBy(x => x.ActivityRegisterID).ToList();
    var roomIdsFromActivityRegisters = activityRegisters.Select(activityRegister => activityRegister.roomID);
    var rooms = AdminDBContext.Rooms.Where(room => roomsIdFromActivityRegisters.Contains(room.Id)).ToList();
    var resultFromJoinAcrossContexts = (from activityRegister in activityRegisters 
                                        join room in rooms on activityRegister.roomID equals room.Id
                                        select new ActivityRegister
                                        {
                                            Room = room,
                                            roomID = room.Id,
                                            Id = activityRegister
                                         });
    return resultFromJoinAcrossContexts.AsQueryable();
}

正如您在此代码中所看到的,您需要做的就是在不同的上下文中执行连接,将数据从数据库下拉到记事本中,然后执行连接。

其他链接:

One Database or Ten?