数据未插入:EF Code First

时间:2012-07-24 07:33:42

标签: c# .net entity-framework ef-code-first

我有以下代码将数据插入GiftCouponPayment表和Payment表。这段代码成功创建了一个数据库和这两个表。但是,没有数据插入一个表 - GiftCouponPayment表。需要改变什么才能使其正常工作?

enter image description here

CODE

static void Main(string[] args)
{

        string connectionstring = "Data Source=.;Initial Catalog=NerdDinners;Integrated Security=True;Connect Timeout=30";

        using (var db = new NerdDinners(connectionstring))
        {
            var giftCouponPayment = new GiftCouponPayment();
            giftCouponPayment.MyID=1;
            giftCouponPayment.MyValue=250;


            List<IPaymentComponent> comps = new List<IPaymentComponent>();
            comps.Add(giftCouponPayment);
            var payment = new Payment { PaymentComponents = comps, PaymentID = 1, PayedTime=DateTime.Now };
            db.Payments.Add(payment);

            int recordsAffected = db.SaveChanges();


        }

}

域类

namespace LijosEF
{

public interface IPaymentComponent
{
    int MyID { get; set; }
    int MyValue { get; set; }
    int GetEffectiveValue();
}


public partial class GiftCouponPayment : IPaymentComponent
{

    private int CouponValue;
    public int MyID
    {
        get
        {
            return this.GiftCouponPaymentID;
        }
        set
        {
            this.GiftCouponPaymentID = value;
        }
    }

    public int MyValue
    {
        get
        {
            return this.CouponValue;
        }
        set
        {
            this.CouponValue = value;
        }
    }

    public int GetEffectiveValue()
    {
        if (this.GiftCouponPaymentID < 2000)
        {
            return 0;
        }
        return this.CouponValue;
    }

    public int GiftCouponPaymentID { get; set; }

}

public partial class Payment
{
    public int PaymentID { get; set; }
    public List<IPaymentComponent> PaymentComponents { get; set; }
    public DateTime PayedTime { get; set; }

}



//System.Data.Entity.DbContext is from EntityFramework.dll
public class NerdDinners : System.Data.Entity.DbContext
{

    public NerdDinners(string connString): base(connString)
    { 

    }

    protected override void OnModelCreating(DbModelBuilder modelbuilder)
    {
        modelbuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }


    public DbSet<GiftCouponPayment> GiftCouponPayments { get; set; }
    public DbSet<Payment> Payments { get; set; }

}
}

1 个答案:

答案 0 :(得分:1)

您无法在导航属性中使用界面 - EF不支持它。您必须直接向班级申报付款:

public partial class Payment {
    public int PaymentID { get; set; }
    public List<GiftPaymentComponent> PaymentComponents { get; set; }
    public DateTime PayedTime { get; set; } 
}

如果您的付款可以有不同的PaymentComponents,您必须使用抽象基类而不是接口的映射继承。