2

私は主キーの一部としてUPCを使用する製品テーブルを持っています。製品にUPCがなくなるまでは問題ありません。これを解決するには、8004 + ID番号と8005 + ID番号の間の数字を生成することをお勧めします。Entity Framework 4:IDフィールドを使用せずに次に高い番号を挿入する方法は?

トランザクション中にUPCがゼロの場合は、UPC値としてゼロを持つ製品のみの新しいUPCを取得できるようにするために、固有のUPCを生成する必要があります。

SQLでは、私はこれを行うことができます:

insert into Product (ID, Name) 
select min(pivotTable.value), 'New Product' as Name 
from pivotTable 
where not exists( 
    select null as nothing 
    from product 
    where pivotTable.value = product.ID) and 
pivotTable.value > 8004000000 and pivotTable.value < 8005000000 

select id 
from product 
where Name = 'New Product' -- assuming Name is unique 

がどのように私はこれを行うだろうEntity Frameworkの4に?別の懸念事項は、これがすべて単一のトランザクションの下にあることです。欠落しているUPCの数を割り当てると、すべての新しい製品に同じUPCを割り当てることができます。

EDIT:

私は、次の最高数を取得するには、このように見えるビューを作成することになったが、それは主キーを決定することはできませんので、EFは、図のテーブルを生成しません。 XMLをハックすると、データベースから更新するまで機能し、変更が消去されます。

Select min(ID), 'New Product' as Name 
from (select distinct ID 
     from product p1 
     where p1.ID > 8004000000 and p1.ID < 8005000000 
     union 
     select distinct coalesce(ID, 8004000000) as ID) A 

    left outer join 

    (select distinct ID 
     from product p2 
     where p2.ID > 8004000000 and p2.ID < 8005000000 
     union 
     select distinct coalesce(ID, 8004000000) as ID) B 

    on A.ID + 1 = B.ID 
where B.ID is null 

そこで質問が同じである:あなたはEntity Frameworkの4で少なくとも利用可能な最大数を生成することができるか、すなわち、どのようにあなたはエンティティへのLINQで上記のSQLクエリを書き直すことができ、またはどのようにあなたが得ることができます更新時に変更を加えるXMLファイルを編集せずにEntity Framework 4の図で表示するビュー?

EDIT:これは、LINQのを使用して、次の利用可能なを生成するようだ:あなたは、この複雑な計算を必要とする理由

// Setup our ID list 
var prod = DC.Products.Where(p => p.ID > 0 && p.ID < 1000) 
    .Select(p => p.ID).Distinct(); 

// Compare the list against itself, offset by 1. Look for "nulls" 
// which represent "next highest number doesn't exist" 
var q = (from p1 in prod 
     from p2 in prod.Where(a => a == p1 + 1).DefaultIfEmpty() // Left join 
     where p2 == 0       // zero is null in this case 
     select p1).Min(); 
var r = q + 1; // one higher than current didn't exist, so that's the answer 

答えて

0

かなり確実ではありません。ただし、データベース全体の番号が一意である必要がある場合は、RowVersionの型をMSSQLテーブルで参照してください。レコードが更新されるたびに毎回変更されるユニークな番号が常に表示されます。そしてそれは全体のデータベースのためにユニークです。

関連する問題