私は主キーの一部として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