sql >> データベース >  >> RDS >> Sqlserver

EntityFramework-1対1-ReferentialConstraintはストアで生成された列にマップされます

    慣例により、EF6は、いわゆる共有主キーの関連付け 、ここで、依存エンティティのPKは、プリンシパルエンティティへのFKとしても機能します。

    あなたの場合、それはAccount.Idを考慮します CustomerへのFKになる 、自動生成されるため、問題の例外が発生します。

    追加の問題は、EF6が明示的なFKプロパティとの1対1の関係をサポートしていないことです(HasForeignKeyはありません) 1対多の関係に似た流暢なAPI)。

    したがって、AccountIdを削除する必要があります モデルからプロパティを取得し、ナビゲーションプロパティのみを残します。また、強く必要というわけではありませんが、命名規則に従い、Accountと呼ぶのがよいでしょう。 AccountValueではなく 。

    つまり、置き換えます

    [Column("CUSTOMER_ID")]
    public int? CustomerId { get; set; }
    
    public virtual Customer CustomerValue { get; set; }
    

    public virtual Customer Customer { get; set; }
    

    FK列名は、MapKeyを使用して指定できます。 流暢なAPI:

    modelBuilder.Entity<Customer>()
        .HasRequired(c => c.Account)
        .WithRequiredPrincipal(a => a.Customer)
        .Map(m => m.MapKey("CUSTOMER_ID")); // <--
    

    これで完了です。

    これで、次のように、最初に新しいCustomerが正しく挿入されます。 次に、新しいAccount それを参照する:

    var account = new Account
    {
        AccountNumber = "00123456",
        Customer = new Customer { FirstName = "Joe" }
    };
    db.Accounts.Add(account);
    db.SaveChanges();
    



    1. PL / SQLで連想配列をソートする方法は?

    2. listaggデータを使用可能な形式に?

    3. Visual Studio2017+エンティティフレームワーク+ID+mysqlが機能しない

    4. PostgreSQL高可用性インストールPatroni