0

GiftCouponPayment テーブルと Payment テーブルにデータを挿入する次のコードがあります。このコードにより、データベースとこれら 2 つのテーブルが正常に作成されました。ただし、1 つのテーブル (GiftCouponPayment テーブル) にはデータが挿入されていません。それを機能させるために何を変更する必要がありますか?

ここに画像の説明を入力

コード

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; }

}
}
4

1 に答える 1

1

ナビゲーション プロパティでインターフェイスを使用することはできません。EF ではサポートされていません。クラスで直接支払いを宣言する必要があります。

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

Payment が異なる可能性がある場合PaymentComponentsは、インターフェイスの代わりに抽象基本クラスでマップされた継承を使用する必要があります。

于 2012-07-24T07:41:48.560 に答える