1

私のモデルの関連付けは(私が信じているように)1対1です:

public class Account
{
    [Key]
    [ForeignKey("BlockedAccount")]
    public virtual Guid AccountId { get; set; }
    public virtual string UserName { get; set; }

    public virtual BlockedAccount BlockedAccount { get; set; }
}

public class BlockedAccount
{
    [Key]
    public virtual Guid BlockedAccountId { get; set; }
    public virtual int BanLevel { get; set; }
    public virtual DateTime BannedDate { get; set; }
    public virtual DateTime ExpirationDate { get; set; }
    public virtual string Reason { get; set; }
}

しかし、それを使おうとすると、プログラムがクラッシュし、次の例外が発生します。

INSERTステートメントがFOREIGNKEY制約「FK_dbo.Accounts_dbo.BlockedAccounts_AccountId」と競合しました。データベース「Accounts」、テーブル「dbo.BlockedAccounts」、列「BlockedAccountId」で競合が発生しました。ステートメントは終了されました。

私はここで何が間違っているのですか?AccountIdを指さしたいBlockedAccountId

4

1 に答える 1

1

エンティティをどのようにアタッチしていますか?実際に外部キーを設定する必要はありません。ナビゲーションプロパティにアタッチするだけで接続が確立されます。このコードは、上記のモデルで私のために機能します:

     public class Account
{
    [Key]
    [ForeignKey("BlockedAccount")]
    public virtual Guid AccountId { get; set; }
    public virtual string UserName { get; set; }

    public virtual BlockedAccount BlockedAccount { get; set; }
}

public class BlockedAccount
{
    [Key]
    public virtual Guid BlockedAccountId { get; set; }
    public virtual int BanLevel { get; set; }
    public virtual DateTime BannedDate { get; set; }
    public virtual DateTime ExpirationDate { get; set; }
    public virtual string Reason { get; set; }

    public BlockedAccount()
    {
        BannedDate = DateTime.Now;
        ExpirationDate = DateTime.Now;
    }
}

public class Model : DbContext
{
    public DbSet<BlockedAccount> BlockedAccounts { get; set; }
    public DbSet<Account> Accounts { get; set; }
}
class Program
{

    static void Main(string[] args)
    {
        var b = new BlockedAccount()
            {
               BlockedAccountId = Guid.NewGuid()
            };
        var a = new Account();

        a.BlockedAccount = b;
        Model m = new Model();
        m.Accounts.Add(a);
        m.SaveChanges();
    }
}

ここに画像の説明を入力してください

于 2012-09-13T19:46:57.020 に答える