0

我有 2 个班 Bill 和 BillType。每个 Bill 都应该有一个 BillType,TypeId 应该是一个 FK。使用 Code First,向我的数据库表 Bills 添加一个名为 BillType_TypeId 的列,该列与表 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 回答