静的データを含むServiceProvidersという名前のテーブルがあります。POCOクラスは次のとおりです
public class ServiceProvider
{
public virtual int Id
{
get;
set;
}
public virtual string Name
{
get;
set;
}
}
Clientテーブルがあります。各クライアントは、「既存の」サービスプロバイダーの1つへの参照を持っている必要があります。
public class Client
{
public virtual int Id
{
get;
set;
}
public virtual string FirstName
{
get;
set;
}
public virtual string LastName
{
get;
set;
}
public virtual ServiceProvider ServiceProvider
{
get;
set;
}
}
EFコードの最初の流暢なAPIを使用してクライアントを次のように構成しています
public ClientConfiguration(): base()
{
HasKey(e => e.Id);
Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
ToTable("dbo.Clients");
Property(e => e.FirstName).IsRequired().HasMaxLength(256).IsVariableLength().HasColumnType("nvarchar");
Property(e => e.LastName).IsRequired().HasMaxLength(256).IsVariableLength().HasColumnType("nvarchar");
HasRequired(e => e.ServiceProvider).WithMany().Map(m => m.MapKey("ServiceProviderId")).WillCascadeOnDelete(false);
}
新しいクライアントのレコードを挿入する場合、既存のServiceProviderインスタンスの参照を取得し、それをクライアントのServiceProviderプロパティに添付します
Client client = new Client() { FirstName = "John", LastName = "Doe" };
client.ServiceProvider = serviceproviders[0]; //An existing ServiceProvider instance fetched from DB earlier
SaveChangesを呼び出すと、EFはServiceProvidersテーブルに新しい(重複した)レコードを挿入します。クライアントテーブルにのみ新しいレコードを挿入し、ServiceProviderId列の値を既存のServiceProviderインスタンスのIDに設定するだけです。
私は何が間違っているのですか?