简体   繁体   English

实体框架如何在多对多关系中插入唯一值而无需手动检查

[英]Entity Framework how do I INSERT unique value on many to many relationship without having to do manual check

Does anyone know how to insert unique values without explicitly having to check for an existing value? 有谁知道如何插入唯一值而无需显式检查现有值?

I am able to make this work, but I am less than impressed with the code I had to write. 我能够做到这一点,但是我对必须编写的代码印象深刻。 Basically I created a helper function to check a unique value on my container. 基本上,我创建了一个辅助函数来检查容器上的唯一值。

The structure is pretty basic. 该结构非常基本。

[ Entry ] *<----->* [ UniqueValue ] [条目] * <-----> * [UniqueValue]

Main code 主要代号

public static void ImportStuff ()
{
    //Generate a list of importable items
    List<DtoItems> items = DtoItemGetter.GetItems();
    using( var container = new MyEntities() )
    {
        foreach( var item in items )
        {
            Entry newEntry = CreateNewEntry( item );

            //******** 
            // Here's the call to my helper method to check 
            // for the uniqueness of the values on the item I am importing
            //******** 
            item.UniqueValuesList.ForEach( 
                uv => HelperMethod( container, newEntry, uv ) );

            containter.AddToEntries( newEntry );

            //Less important... but it would be nice if I didn't 
            // have to save everytime I add an new entry... but 
            // this necessary for the Helper check.
            container.SaveChanges();
        }
    }
}

Helper Method 辅助方法

public static void HelperMethod( 
    MyEntities container, Entry newEntry, string checkValue )
{
    UniqueItem unique = null;

    //Have to check to see if it already exists in the DB
    container.uniqueItems.ForEach( uv => { 
        if( uv.Name == checkValue )
        {
            unique = uv;
        } } );

    //Here's the money, either add the one I found, or 
    //create a new one... meh
    newEntry.UniqueItems.Add( 
        unique ?? new UniqueItem { Name = checkValue } );
}

Hopefully this makes enough sense. 希望这有足够的道理。

Entity framework doesn't support unique constraints yet - http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx 实体框架尚不支持唯一约束-http: //blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx

So if you want to use unique constraints you should set the constraint on the database manually and check by hand. 因此,如果要使用唯一约束,则应在数据库上手动设置约束并手动检查。

EF Codefirst validate unique property? EF Codefirst验证唯一属性?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM