0

Bill と BillType の 2 つのクラスがあります。各 Bill には BillType があり、TypeId は FK である必要があります。Code First を使用して、BillType_TypeId という名前のデータベース テーブル Bills に、テーブル BillTypes との FK 関係を持つ列が追加されます。

public class Bill
{
    [Key]
    public int BillId { get; set; }

    [Required, MaxLength(100)]
    public string Name { get; set; }

    [Required]
    public decimal Amount { get; set; }

    public System.DateTime DueDate { get; set; }

    [Required]
    public Guid UserId { get; set; }
}

public class BillType
{
    [Key]
    public int TypeId { get; set; }

    [Required, MaxLength(100)]
    public string Name { get; set; }

    public virtual List<Bill> Bills { get; set; }
}

TypeId を Bills テーブルに挿入する必要があるときに問題が発生します。このコードを使用して挿入しています:

public class BillActions
{
    private BillContext _db = new BillContext();

    public Boolean InsertNewBill(int billType, string name, decimal amount, DateTime dueDate, Guid userId)
    {
        var bill = new Bill {                
            xxx                              <-- problem is here
            Name = name,
            Amount = amount,
            DueDate = dueDate,
            UserId = userId 
        };

        _db.Bills.Add(bill);

        _db.SaveChanges();
        return true;
    }
}

int billType と等しい公開オブジェクトはありません。FK 制約を維持しながら追加する方法がわかりません。どうすればこれを達成できますか。また、Entity Framework 5 を使用しています。

4

1 に答える 1

1

BillType 参照を公開するようにクラスを更新できます。

public class Bill
{
    [Key]
    public int BillId { get; set; }

    [Required, MaxLength(100)]
    public string Name { get; set; }

    [Required]
    public decimal Amount { get; set; }

    public System.DateTime DueDate { get; set; }

    [Required]
    public Guid UserId { get; set; }

    public int BillTypeId {get;set;}
    public BillType BillType {get;set;}
}

次に、作成します:

    var bill = new Bill {                
        BillTypeId = billType,
        Name = name,
        Amount = amount,
        DueDate = dueDate,
        UserId = userId 
    };

請求書で BillType の参照を公開したくない場合は、流暢なマッピングを追加することもできます。

        modelBuilder.Entity<BillType>()
            .HasMany(bt => bt.Bills)
            .WithOptional()
            .HasForeignKey(bt => bt.BillTypeId);
于 2012-10-18T14:55:52.310 に答える