在嵌套字段中插入



我是LINQ to SQL的新用户,我使用它有一些问题。我已经使用了LINQ到SQL设计器,我已经创建了我的类,映射到DB表上。特别地,我有一个类,名为voice:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.voce")]
public partial class voce : INotifyPropertyChanging, INotifyPropertyChanged
{
    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
    private int _id_voce;
    ... other private fields;

    private int _category;
    private EntityRef<category> _category1;
            public voce()
    {
        this._riepilogo = new EntitySet<riepilogo>(new Action<riepilogo>(this.attach_riepilogo), new Action<riepilogo>(this.detach_riepilogo));
        this._hera = default(EntityRef<hera>);
        this._category1 = default(EntityRef<category>);
        OnCreated();
    }
    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_id_voce", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int id_voce
    {
        get
        {
            return this._id_voce;
        }
        set
        {
            if ((this._id_voce != value))
            {
                this.Onid_voceChanging(value);
                this.SendPropertyChanging();
                this._id_voce = value;
                this.SendPropertyChanged("id_voce");
                this.Onid_voceChanged();
            }
        }
    }
    ......
    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_category", DbType="Int NOT NULL")]
    public int category
    {
        get
        {
            return this._category;
        }
        set
        {
            if ((this._category != value))
            {
                if (this._category1.HasLoadedOrAssignedValue)
                {
                    throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
                }
                this.OncategoryChanging(value);
                this.SendPropertyChanging();
                this._category = value;
                this.SendPropertyChanged("category");
                this.OncategoryChanged();
            }
        }
    }

可以看到,语音类有一个名为category的字段,它引用一个名为category的表。

当我添加一个新的声音到我的数据库时,我创建一个新的声音instance,使用DataContext,我简单地添加它,使用:

voce v = new voce(){...field, category1 = //create or retrieve category};

特别是,如果类别字段已经存在,则从DB检索,如果不存在,则在插入语音之前插入它。

问题是,当我在数据库中添加声音时:

datacontext.InsertOnSubmit(v);
datacontext.SubmitChanges();

再次插入类别,使用唯一约束失败。

如何添加语音而不添加每个嵌套对象?

谢谢你,很抱歉我的英语不好

internal category GetCategoryFromDescription (string desc, Utility.VOICE_MODALITY mode)
    {
        bool type = mode == Utility.VOICE_MODALITY.ENTRATA ? true : false;
        var query = from cat in dc.category
                    where cat.description == desc && cat.type == type
                    select cat;
        if (query.Count() == 0)
        {
            category newC =  new category() { description = desc };
            dc.category.InsertOnSubmit(newC);
            dc.SubmitChanges();
            return newC;
        }
        else
            return query.Single();
    }

相关内容

  • 没有找到相关文章

最新更新