を使用してEntity Framework 5 code first
います。2 つのテーブル間に内部結合を設定しようとしていますが、これを行う方法がわかりません。2 つのテーブルには主キーと外部キーの関連付けはありませんが、共通のフィールド Domain があります。
tblServer テーブル:
Server_ID
ServerName
Domain
...
...
tblCommandExecutionServer テーブル:
ServerListID
ServerName
Domain
...
...
これは、2 つのテーブルを特定のエンティティ クラスにマップするように構成した方法です。
ServerConfiguration クラス:
class ServerConfiguration : EntityTypeConfiguration<Server>
{
internal ServerConfiguration()
{
this.ToTable("tblServer");
this.Property(x => x.Id).HasColumnName("Server_ID");
this.Property(x => x.Name).HasColumnName("ServerName");
}
}
CommandExecutionServerConfiguration クラス:
class CommandExecutionServerConfiguration : EntityTypeConfiguration<CommandExecutionServer>
{
internal CommandExecutionServerConfiguration()
{
this.ToTable("tblCommandExecutionServer");
this.Property(x => x.Id).HasColumnName("ServerListID");
this.Property(x => x.Name).HasColumnName("ServerName");
}
}
サーバークラス:
public class Server : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public string Domain { get; set; }
public virtual CommandExecutionServer CommandExecutionServer { get; set; }
}
CommandExecutionServer クラス:
public class CommandExecutionServer : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public string Domain { get; set; }
public virtual Server Server { get; set; }
}
2 つのテーブルは、列を介してリンクされていません。次の内部結合を作成する必要がありますが、方法がわかりません:
SELECT
ces.ServerName,
ws.ServerName,
ws.Domain
FROM
tblServer ws
INNER JOIN tblCommandExecutionServer ces ON ws.Domain = ces.Domain
WHERE
ws.ServerName = 'my-server-name' AND ces.Active = 1;
私のデータベースコンテキストクラス:
public DbSet<Server> Servers { get; set; }
public DbSet<CommandExecutionServer> CommandExecutionServers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ServerConfiguration());
modelBuilder.Configurations.Add(new CommandExecutionServerConfiguration());
}
そして、これは私が現在持っているものです。これがどのように見えるべきかわかりませんか?
public Server FindByServerName(string server, bool isActive, string domain)
{
return DatabaseContext.Servers
.SingleOrDefault(entity => entity.Name == server
&& entity.IsActive == isActive);
//&& entity.Domain == server
}